Esta es una guía rápida sobre cómo usar una Raspberry Pi para reproducir tocadiscos modernos con salida USB de forma inalámbrica en una instalación de Sonos. Esta guía se centra en este caso de uso, pero también puede usarse para transmitir a otros parlantes, ya que vamos a crear una transmisión MP3 que se puede reproducir con prácticamente cualquier cosa que pueda transmitir audio.
Primero necesitamos una instalación limpia de Raspbian en una tarjeta SD. Como no necesitamos gráficos ni nada especial, podemos usar Raspbian Lite. Además, no necesitamos mucho espacio en disco, probablemente cualquier cosa a partir de 2 GB sea buena. Después de la instalación, estoy usando sólo 1,5 GB de mi tarjeta SD.
Para mi instalación, utilicé la versión Buster
de Raspbian OS Lite (septiembre de 2022). Puede probar una versión más nueva, pero no está probada.
Instale Raspberry Pi OS Lite (64 bits) a través de Raspberry Pi Imager https://www.raspberrypi.com/software/
Haga clic en el ícono de ajustes para ver opciones avanzadas
vinyl
,Conecte su Raspberry Pi, ssh y ejecute lo siguiente
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
Vaya directamente a "Comprobar si la cocción al vapor funciona".
Ahora, conecta el tocadiscos a la Raspberry Pi mediante USB. Puede utilizar el comando arecord -l
para comprobar si su dispositivo ha sido detectado. El mío muestra esto:
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
Anota la tarjeta número 1
en mi caso (" card: 1
") o mejor aún el nombre ("CODEC" arriba). Probablemente sea lo mismo para usted, pero si es diferente, es posible que deba recordarlo y cambiarlo en consecuencia en los siguientes pasos. Lo utilizará en el archivo asound.conf
a continuación.
ALSA es el subsistema de sonido de Linux de nivel más bajo. Estamos configurando la entrada para que darkice pueda usarla.
Como la mayoría de los tocadiscos USB no tienen control de volumen de hardware y el volumen de entrada está estancado en aproximadamente la mitad de lo que debería ser, necesitamos agregar un control de volumen de software. Cree el archivo /etc/asound.conf y edítelo para agregar el siguiente contenido:
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
}
A continuación, ejecute este comando para actualizar el estado de alsa y también mostrar los medidores VU para probar el volumen de entrada:
arecord -D dmic_sv -r 48000 -f dat -c 2 --vumeter=stereo /dev/null
(Mostrará volumen cero hasta que reproduzca algo en su tocadiscos).
Quizás notes que el volumen es demasiado bajo. Si es así, puedes usar alsamixer
para cambiar el volumen. Presione F6
para seleccionar el dispositivo giratorio USB y presione TAB
hasta que vea el control deslizante de impulso. Lo tengo configurado en 65
en mi configuración, pero puedes intentarlo. Asegúrese de no subirlo demasiado, o la calidad del sonido podría degradarse debido al recorte.
Ejecute los siguientes comandos:
sudo apt-get update
sudo apt-get install -y darkice icecast2
Seleccione Yes
para configurar Icecast. Puedes dejar todo como predeterminado, pero si cambias la contraseña, asegúrate de cambiarla en la configuración en los siguientes pasos.
Darkice es el software que graba desde el dispositivo USB y lo codifica en MP3. Para configurarlo, cree o edite el archivo /etc/darkice.cfg y colóquelo en:
# 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 obtener más información sobre este archivo y los parámetros que puede cambiar, consulte la página de manual de darkice.cfg.
Darkice y icecast utilizan controles init.d anticuados. Modernicémoslos mientras estamos en ello.
# Remove old-fashioned init.d controls
sudo update-rc.d darkice remove
sudo update-rc.d icecast2 remove
Copie el siguiente código en /etc/systemd/system/darkice.service y /etc/systemd/system/icecast2.service. Entonces corre
sudo systemctl enable icecast2
sudo systemctl enable darkice
servicio.darkice
[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.servicio
[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 la Raspberry Pi, para comprobar si todo está configurado correctamente y porque hemos cambiado algunos archivos de configuración y nos aseguramos de que Darkice se esté ejecutando.
Ahora abra su navegador y vaya a http://vinyl.local:8000
(puerto icecast2 predeterminado). Deberías ver un Mountpoint Mount Point /turntable.mp3
allí. Si no, regrese y verifique si hizo todo como se describe. Haga clic derecho en el enlace M3U (arriba a la derecha) y copie la dirección del enlace. Esta es tu URL de Steam. Puede abrirlo en iTunes, VLC, su navegador o cualquier otro cliente de audio que admita transmisión.
Abre la aplicación Sonos en tu escritorio (esto no funcionará en dispositivos móviles). Vaya a Manage
> Add Radio Station...
y pegue la URL de su transmisión. Puedes elegir el nombre que quieras. Para reproducir la transmisión en tu Sonos, ve a Radio by TuneIn
> My Radio Stations
. ¡Tu transmisión debería aparecer allí! ¡Haz clic derecho para agregar a tus favoritos si lo deseas! :-) Puedes comenzar a jugar desde dispositivos móviles, pero no puedes agregarles una transmisión de red.
Para acelerar el tiempo de arranque de tu Raspberry Pi puedes
Esto se deja como ejercicio para el lector, pero hay varios fragmentos de código en fastboot.sh para ver, así como varios enlaces en notas técnicas y referencias.
Ver también