Este é um guia rápido sobre como usar um Raspberry Pi para reproduzir toca-discos modernos com saída USB sem fio em uma instalação Sonos. Este guia é focado neste caso de uso, mas também pode ser usado para transmitir para outros alto-falantes, pois criaremos um fluxo de MP3 que pode ser reproduzido por praticamente qualquer coisa que possa transmitir áudio.
Primeiro precisamos de uma instalação limpa do Raspbian em um cartão SD. Como não precisamos de gráficos nem nada de especial, podemos usar o Raspbian Lite. Além disso, não precisamos de muito espaço em disco, provavelmente qualquer coisa a partir de 2 GB é boa. Após a instalação, estou usando apenas 1,5 GB do meu cartão SD.
Para minha instalação, usei a versão Buster
do Raspbian OS Lite (setembro de 2022). Você pode experimentar uma versão mais recente, mas ela não foi testada.
Instale o Raspberry Pi OS Lite (64 bits) por meio do Raspberry Pi Imager https://www.raspberrypi.com/software/
Clique no ícone de engrenagem para opções avançadas
vinyl
,Conecte seu Raspberry Pi, faça ssh nele e execute o seguinte
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
Vá para "Verificar se o vapor está funcionando".
Agora, conecte o toca-discos ao Raspberry Pi, usando USB. Você pode usar o comando arecord -l
para verificar se o seu dispositivo foi detectado. O meu mostra isso:
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
Anote o número do cartão 1
no meu caso (“ card: 1
”) ou melhor ainda o nome (“CODEC” acima). Provavelmente é o mesmo para você, mas se for diferente, pode ser necessário lembrá-lo e alterá-lo de acordo nas etapas a seguir. Você o usará no arquivo asound.conf
abaixo.
ALSA é o subsistema de som Linux de nível mais baixo. Estamos configurando a entrada para que o darkice possa usá-la.
Como a maioria dos toca-discos USB não possui controle de volume de hardware e o volume de entrada está preso em aproximadamente metade do que deveria ser, precisamos adicionar um controle de volume de software. Crie o arquivo /etc/asound.conf e edite-o para adicionar o seguinte conteúdo:
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
}
Em seguida, execute este comando para atualizar o estado alsa e também mostrar medidores VU para testar o volume de entrada:
arecord -D dmic_sv -r 48000 -f dat -c 2 --vumeter=stereo /dev/null
(Ele mostrará volume zero até que você toque algo em seu toca-discos.)
Você pode notar que o volume está muito baixo. Nesse caso, você pode usar alsamixer
para alterar o volume. Pressione F6
para selecionar o dispositivo toca-discos USB e pressione TAB
até ver o controle deslizante de aumento. Eu configurei para 65
na minha configuração, mas você pode tentar. Certifique-se de não aumentar muito o volume, ou a qualidade do som poderá piorar devido ao corte.
Execute os seguintes comandos:
sudo apt-get update
sudo apt-get install -y darkice icecast2
Selecione Yes
para configurar o Icecast. Você pode deixar tudo como padrão, mas se alterar a senha, certifique-se de alterar a senha na configuração nos próximos passos.
Darkice é o software que grava do dispositivo USB e codifica-o em MP3. Para configurá-lo, crie ou edite o arquivo /etc/darkice.cfg e coloque-o em:
# 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
Para obter mais informações sobre este arquivo e os parâmetros que você pode alterar, consulte a página de manual darkice.cfg.
Darkice e icecast usam controles init.d antigos. Vamos apenas modernizá-los enquanto estamos nisso.
# Remove old-fashioned init.d controls
sudo update-rc.d darkice remove
sudo update-rc.d icecast2 remove
Copie o código abaixo para /etc/systemd/system/darkice.service e /etc/systemd/system/icecast2.service. Então corra
sudo systemctl enable icecast2
sudo systemctl enable darkice
darkice.serviço
[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
Reinicie o Raspberry Pi, para verificar se tudo está configurado corretamente e porque alteramos alguns arquivos de configuração e garantimos que o Darkice está funcionando.
Agora abra seu navegador e vá para http://vinyl.local:8000
(porta icecast2 padrão). Você deverá ver um Mountpoint Mount Point /turntable.mp3
lá. Caso contrário, volte e verifique se você fez tudo conforme descrito. Clique com o botão direito no link M3U (canto superior direito) e copie o endereço do link. Este é o seu URL do Steam. Você pode abri-lo no iTunes, VLC, seu navegador ou em qualquer outro cliente de áudio que suporte streaming.
Abra o aplicativo Sonos em seu desktop (isso não funcionará em dispositivos móveis). Vá para Manage
> Add Radio Station...
e cole o URL do stream. Você pode escolher o nome que quiser. Para reproduzir a transmissão em seu Sonos, acesse Radio by TuneIn
> My Radio Stations
. Seu stream deve aparecer lá! Clique com o botão direito para adicionar aos seus favoritos, se desejar! :-) Você pode começar a jogar em dispositivos móveis, mas não pode adicionar um stream de rede a eles.
Para acelerar o tempo de inicialização do Raspberry Pi, você pode
Isso é deixado como um exercício para o leitor, mas existem vários trechos de código em fastboot.sh para serem examinados, bem como vários links em notas técnicas e referências.
Veja também