Redireccionar audio a otro dispositivo AirPlay

20

Estoy configurando Mopidy en Raspbian para poder usar Raspberry Pi como un jukebox de Spotify (y archivos locales). Sé que la salida de audio analógico de la Raspberry Pi no es excelente.

¿Hay alguna manera de redirigir todo el audio de la Raspberry Pi a un dispositivo AirPlay (un Airport Express, por ejemplo)?

Sería genial si también pudiera hacer todo desde la línea de comandos, para poder configurar algunos scripts para cambiar de dispositivo.

leolobato
fuente
Esa es una buena pregunta. Me encanta el airplay y eso tiene sentido usarlo en un Pi. ¡Cavaré alrededor de mí mismo en esa pero buena pregunta! +1
Piotr Kula
Por lo que entendí, se puede hacer usando PulseAudio. Estoy cavando también.
leolobato
eche un vistazo a lo que estamos discutiendo aquí raspberrypi.org/phpBB3/…
jmp909
Sé que esto está un poco fuera de tema, pero si no buscas playbac remoto, ¿qué tal un buen DAC USB?
petr

Respuestas:

13

Puede usar el módulo mpd, pulseaudio y raop2, si es necesario:

  • mpd para gestionar listas de reproducción, biblioteca, etc. ( sudo apt-get install mpd)
  • pulseaudio para gestionar salidas de audio: raop para AirPlay, o cualquier otro dispositivo de salida como conector analógico, HDMI, servicio de transmisión http, etc. ( sudo apt-get install pulseaudio)
  • módulo raop2 para pulseaudio si el módulo raop original integrado en pulseaudio no funciona

Tuve que construir pulseaudio desde la fuente para obtener una versión actualizada del módulo RAOP para pulseaudio.


Esto es lo que hice para que funcione (puede quejarse de paquetes faltantes, solo sudo apt-get installellos):

Instalar MPD

sudo apt-get install mpd

Instalar PulseAudio

Opción A: tiene un dispositivo AirPlay antiguo o no necesita transmisión UDP.

Es más fácil pero menos compatible.

sudo apt-get install pulseaudio

Opción B: desea una mejor compatibilidad y soporte para transmisión TCP y UDP

Entonces necesita el módulo raop2 para pulseaudio, lo que significa construir PA desde la fuente.

Instala git si aún no lo has hecho y crea pulseaudio (consulta las instrucciones oficiales ):

sudo apt-get install git intltool autoconf build-essential
cd
git clone https://github.com/hfujita/pulseaudio-raop2
cd pulseaudio-raop2
./bootstrap.sh
make
sudo make install

En mi configuración, tuve que vincular libpulse.so.0 manualmente:

cd ~/pulseaudio-raop2
sudo rm /usr/lib/arm-linux-gnueabi/libpulse.so.0
sudo ln -s `cd;pwd`/pulseaudio-raop2/src/.libs/libpulse.so.0 /usr/lib/arm-linux-gnueabi/libpulse.so.0
sudo chown root.root /usr/lib/arm-linux-gnueabi/libpulse.so.0.16.2
sudo chmod 744 /usr/lib/arm-linux-gnueabi/libpulse.so.0

o, a su preferencia:

cd ~/pulseaudio-raop2
sudo rm /usr/lib/arm-linux-gnueabi/libpulse.so.0.16.2
sudo mv pulseaudio-raop2/src/.libs/libpulse.so.0 /usr/lib/arm-linux-gnueabi/libpulse.so.0.16.2
sudo chown root.root /usr/lib/arm-linux-gnueabi/libpulse.so.0.16.2
sudo chmod 744 /usr/lib/arm-linux-gnueabi/libpulse.so.0.16.2

Configura todo

Configuración inicial de MPD

Ahora necesitamos configurar MPD:

sudo vi /etc/mpd.conf

En ese archivo, configure lo siguiente:

music_directory "/path/to/your/music"
user "mpd"
bind_to_address "127.0.0.1"
bind_to_address "192.168.x.y"
bind_to_address "2a01:xzy....your IPv6 if you want"

Tendremos que editar la salida, pero primero necesitamos el nombre del receptor de pulseaudio.

PulseAudio se hunde

Es bueno tener Avahi / zeroconf porque permitirá el descubrimiento de dispositivos AirPlay (a través de zeroconf / mDNS / Bonjour):

sudo apt-get install avahi

Ahora podemos iniciar pulseaudio e intentar cargar los módulos RAOP:

pulseaudio --start --log-target=syslog -vvvv --log-level=debug
pacmd load-module module-raop-discover
pacmd list-sinks | grep name:

Aquí está la salida en mi configuración:

name: <raop_output.Freebox-Player.local>
name: <raop_output.Freebox-Server.local>
name: <raop_output.Freebox-Player.local.2>
name: <raop_output.Freebox-Server.local.2>

Luego necesita editar /etc/mpd.confnuevamente y agregar las siguientes salidas:

audio_output {
    type            "pulse"
    name            "Freebox Player"
    sink            "raop_output.Freebox-Player.local"
    format          "44100:24:1"
}

Agregue uno de estos bloques para cada dispositivo AirPlay al que desee transmitir música.

Configuración de PulseAudio

La última parte es configurar PA:

sudo vi /etc/pulse/client.conf

Sin comentar autospawn = yes, esto hará que pulseaudio se inicie automáticamente cuando sea necesario.

sudo vi /etc/pulse/default.pa

Agregue la siguiente línea en la parte inferior:

load-module module-raop-discover

Esto hará que pulseaudio cargue el módulo de descubrimiento RAOP cuando se inicie.

Último paso

Debería estar funcionando ahora. Inicie MPD (deténgalo primero si se está ejecutando):

sudo /etc/init.d/mpd start

Espera un poco, toma al menos 10-15 segundos en mi RasPI antes de que el demonio pueda funcionar correctamente.

Actualice su biblioteca de música (y espere a que termine):

sudo apt-get install mpc
mpc update

Habilite las salidas a voluntad (lo siguiente enumerará las salidas MPD configuradas y habilitará la primera):

mpc outputs
mpc enable 1

Ahora use su cliente MPD favorito para reproducir música. Estoy usando ncmpcppen la línea de comandos y MPDroid en mi teléfono / tableta.

Solución de problemas

Inicie mpd en forma detallada, pulseaudio con el nivel de registro máximo y supervise los registros:

mpd --verbose
pulseaudio --start --log-target=syslog --log-level=debug -vvvv
tail -f /var/log/mpd/mpd.log
tail -f /var/log/syslog

Intenta hacer que pulseaudio funcione primero. Simplemente cargue pulseaudio, cargue el módulo de descubrimiento RAOP, enumere los sumideros, configure el sumidero predeterminado e intente reproducir algo:

paplay /usr/share/sounds/alsa/Front_Center.wav

Una vez que pulseaudio funcione, intente que MPD funcione con él.

Benoit Duffez
fuente
1
¡Eso es exactamente lo que estaba buscando! Tengo un mopidy corriendo en una Raspberry Pi. ¡Intentaremos esto y lo actualizaremos para decirte si funcionó!
leolobato
2

Parece que pulseaudio-module-raop es lo que está buscando. Esta guía tiene una descripción detallada sobre cómo configurar esto en Ubuntu.

Lukas Vermeer
fuente
1
En términos generales, una respuesta que proporciona una explicación detallada es mejor que un enlace. Los enlaces pueden reubicarse o morir. Más importante aún, explicar un poco acerca de pulseaudio-module-raop puede ser una buena idea ..
ramblinjan
2

Pasé algún tiempo tratando de configurar Airplay a través de Raop / PulseAudio en el nuevo Raspberry Pi 3 usando Raspbian Jessie con muy poco éxito. Recomiendo encarecidamente forked-daapd :

Esta es una versión muy actualizada del original forked-daapd 0.19, un servidor de medios Linux / FreeBSD DAAP (iTunes) con soporte para dispositivos AirPlay, Apple Remote (y compatibles), MPD, Spotify, transmisión de mp3 y radio por internet.

La instalación fue muy sencilla y tuve todo listo en unos 10 minutos. Aquí están las instrucciones de instalación como se detalla aquí :

1a. If you use Jessie then add this line to /etc/apt/sources.list:
deb http://www.gyfgafguf.dk/raspbian jessie/armhf/
or
1b. If you use Wheezy then add this line to /etc/apt/sources.list:
deb http://www.gyfgafguf.dk/raspbian wheezy-backports/armhf/
2. Run sudo apt-get update and then sudo apt-get install forked-daapd
3. Edit the config file /etc/forked-daapd.conf and (re)start the server with sudo /etc/init.d/forked-daapd restart

Optional - how to add support for Spotify:
1. Add deb http://apt.mopidy.com/ stable main contrib non-free to /etc/apt/sources.list
2. Run sudo apt-get update and then sudo apt-get install libspotify-dev
3. Restart forked-daapd and enter credentials as described in the instructions.
4. Check the log to see how it is working. It should start loading your playlists.
Nate
fuente