Ini adalah panduan singkat tentang cara menggunakan Raspberry Pi untuk memainkan turntable modern dengan output USB secara nirkabel pada instalasi Sonos. Panduan ini difokuskan pada kasus penggunaan ini, namun mungkin juga digunakan untuk melakukan streaming ke speaker lain karena kita akan membuat streaming MP3 yang dapat diputar oleh hampir semua hal yang dapat melakukan streaming audio.
Pertama kita memerlukan instalasi Raspbian yang bersih pada kartu SD. Karena kita tidak memerlukan grafik atau sesuatu yang khusus, kita dapat menggunakan Raspbian Lite. Selain itu, kita tidak memerlukan banyak ruang disk, mungkin apa pun mulai dari 2 GB ke atas sudah cukup. Setelah instalasi saya hanya menggunakan 1,5GB kartu SD saya.
Untuk instalasi saya, saya telah menggunakan Raspbian OS Lite rilis Buster
(September 2022). Anda mungkin mencoba versi yang lebih baru, tetapi ini belum teruji.
Instal Raspberry Pi OS Lite (64-bit) melalui Raspberry Pi Imager https://www.raspberrypi.com/software/
Klik ikon Roda Gigi untuk opsi lanjutan
vinyl
,Hubungkan Raspberry Pi Anda, ssh ke sana, dan jalankan perintah berikut
smorton@homepc: ~ $ ssh [email protected]
vinyl@vinyl: ~ $ cd /tmp && wget https://github.com/stephencmorton/USB-Turntables-to-Sonos-with-RPi/archive/master.zip && unzip master.zip && USB-Turntables-to-Sonos-with-RPi-master/scripts/install.sh
Lewati ke "Periksa apakah pengukusan berfungsi".
Sekarang, sambungkan meja putar ke Raspberry Pi, menggunakan USB. Anda dapat menggunakan perintah arecord -l
untuk memeriksa apakah perangkat Anda telah terdeteksi. Milik saya menunjukkan ini:
vinyl@vinyl:~ $ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: CODEC [USB AUDIO CODEC], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
Catat nomor kartu 1
dalam kasus saya (" card: 1
") atau lebih baik lagi namanya ("CODEC" di atas). Ini mungkin sama bagi Anda, namun jika berbeda, Anda mungkin perlu mengingatnya dan mengubahnya sesuai dengan langkah-langkah berikut. Anda akan menggunakan file asound.conf
di bawah ini.
ALSA adalah subsistem suara linux tingkat terendah. Kami mengonfigurasi masukan agar darkice dapat menggunakannya.
Karena sebagian besar turntable USB tidak memiliki kontrol volume perangkat keras, dan volume input terhenti sekitar setengah dari yang seharusnya, kita perlu menambahkan kontrol volume perangkat lunak. Buat file /etc/asound.conf dan edit untuk menambahkan konten berikut:
pcm.dmic_hw {
type hw
# card 1
# For some reason, the card number can jump around. But this will get it by name
card CODEC
channels 2
# format S16_LE # Use this if "format dat" doesn't work. Only difference is S16_LE = 44.1 kHz sampling vs dat = 48 kHz
format dat
}
pcm.dmic_mm {
type mmap_emul
slave.pcm dmic_hw
}
pcm.dmic_sv {
type softvol
slave.pcm dmic_hw
control {
name "Boost Capture Volume"
# card 1
# For some reason, the card number can jump around. But this will get it by name
card CODEC
}
min_dB -5.0
max_dB 20.0
}
Selanjutnya, jalankan perintah ini untuk menyegarkan status alsa dan juga menampilkan VU Meter untuk menguji volume input:
arecord -D dmic_sv -r 48000 -f dat -c 2 --vumeter=stereo /dev/null
(Ini akan menampilkan volume nol sampai Anda memutar sesuatu di pemutar rekaman Anda.)
Anda mungkin memperhatikan, volumenya terlalu rendah. Jika iya, Anda bisa menggunakan alsamixer
untuk mengubah volumenya. Tekan F6
untuk memilih perangkat USB Turntable, dan tekan TAB
hingga Anda melihat penggeser boost. Saya telah menyetelnya ke 65
pada pengaturan saya, tetapi Anda dapat mencobanya. Pastikan Anda tidak menaikkannya terlalu tinggi, atau kualitas suara Anda mungkin menurun karena kliping.
Jalankan perintah berikut:
sudo apt-get update
sudo apt-get install -y darkice icecast2
Pilih Yes
untuk mengonfigurasi Icecast. Anda dapat membiarkan semuanya sebagai default, tetapi jika Anda mengubah kata sandi, pastikan Anda mengubah kata sandi pada konfigurasi pada langkah berikutnya.
Darkice adalah perangkat lunak yang merekam dari perangkat USB dan menyandikannya ke dalam MP3. Untuk mengkonfigurasinya, buat atau edit file /etc/darkice.cfg, dan masukkan ini ke dalam:
# this section describes general aspects of the live streaming session
[general]
duration = 0 # duration of encoding, in seconds. 0 means forever
bufferSecs = 1 # size of internal slip buffer, in seconds
reconnect = yes # reconnect to the server(s) if disconnected
realtime = yes # run the encoder with POSIX realtime priority (default==yes)
rtprio = 4 # scheduling priority for the realtime threads (default==4)
# this section describes the audio input that will be streamed
[input]
device = dmic_sv # OSS DSP soundcard device for the audio input
sampleRate = 48000 # other settings have crackling audo, esp. 44100
bitsPerSample = 16 # bits per sample. try 16
channel = 2 # channels. 1 = mono, 2 = stereo
# this section describes a streaming connection to an IceCast2 server
# there may be up to 8 of these sections, named [icecast2-0] ... [icecast2-7]
# these can be mixed with [icecast-x] and [shoutcast-x] sections
[icecast2-0]
bitrateMode = cbr
format = mp3
bitrate = 320
server = vinyl
port = 8000
mountPoint = turntable.mp3
name = Turntable
description = Music from our record player
# highpass = 18
# lowpass = 20000
url = http://vinyl.local:8080/
genre = vinyl
public = no
password = hackme # or whatever you set your icecast2 password to
Untuk informasi lebih lanjut tentang file ini dan parameter yang dapat Anda ubah, lihat halaman manual darkice.cfg.
Darkice dan icecast menggunakan kontrol init.d kuno. Mari kita memodernisasikannya selagi kita melakukannya.
# Remove old-fashioned init.d controls
sudo update-rc.d darkice remove
sudo update-rc.d icecast2 remove
Salin kode di bawah ini ke /etc/systemd/system/darkice.service dan /etc/systemd/system/icecast2.service. Lalu lari
sudo systemctl enable icecast2
sudo systemctl enable darkice
darkice.service
[Unit]
Description =DarkIce Icecast Network Audio Streamer
After =icecast.target
[Service]
Type =simple
ExecStart =/usr/bin/darkice -c /etc/darkice.cfg
ExecReload =/bin/kill -HUP $MAINPID
User =root
Group =root
# WorkingDirectory=/usr/share/icecast2/
Restart =always
RestartSec =5
[Install]
WantedBy =multi-user.target
icecast2.service
[Unit]
Description =Icecast Network Audio Streaming Server
After =network.target
[Service]
Type =simple
ExecStart =/usr/bin/icecast2 -c /etc/icecast2/icecast.xml
ExecReload =/bin/kill -HUP $MAINPID
User =icecast2
Group =icecast
# WorkingDirectory=/usr/share/icecast2/
Restart =always
[Install]
WantedBy =multi-user.target
Reboot Raspberry Pi, untuk memeriksa apakah semuanya sudah diatur dengan benar dan karena kami telah mengubah beberapa file konfigurasi dan memastikan Darkice berjalan.
Sekarang buka browser Anda, dan buka http://vinyl.local:8000
(port default icecast2). Anda akan melihat Mountpoint Mount Point /turntable.mp3
di sana. Jika tidak, kembali dan periksa apakah Anda melakukan semuanya seperti yang dijelaskan. Klik kanan link M3U (kanan atas), dan copy alamat linknya. Ini adalah URL uap Anda. Anda dapat membukanya di iTunes, VLC, browser Anda, atau klien audio lain yang mendukung streaming.
Buka aplikasi Sonos di desktop Anda (ini tidak berfungsi di perangkat seluler). Buka Manage
> Add Radio Station...
dan tempelkan URL streaming Anda. Anda dapat memilih nama apa pun yang Anda inginkan. Untuk memutar streaming di Sonos Anda, buka Radio by TuneIn
> My Radio Stations
. Aliran Anda akan muncul di sana! Klik kanan untuk menambahkan ke favorit Anda jika Anda mau! :-) Anda dapat mulai bermain dari perangkat seluler, Anda tidak dapat menambahkan aliran jaringan ke perangkat tersebut.
Untuk mempercepat waktu boot Raspberry Pi Anda, Anda bisa
Ini dibiarkan sebagai latihan bagi pembaca, tetapi ada berbagai cuplikan kode di fastboot.sh untuk dilihat serta berbagai tautan dalam catatan teknis dan referensi.
Lihat juga