Redirecionar o áudio para outro dispositivo AirPlay

20

Estou configurando o Mopidy no Raspbian para poder usar o Raspberry Pi como uma jukebox do Spotify (e arquivos locais). Eu sei que a saída de áudio analógica do Raspberry Pi não é ótima.

Existe uma maneira de redirecionar todo o áudio do Raspberry Pi para um dispositivo AirPlay (um Airport Express, por exemplo)?

Seria ótimo se eu também pudesse fazer tudo na linha de comando, para poder configurar alguns scripts para alternar entre dispositivos diferentes.

leolobato
fonte
Essa é uma ótima pergunta. Eu amo airplay e isso faz sentido usá-lo em um Pi. Vou cavar em torno de mim nessa única pergunta, mas boa! +1
Piotr Kula
Pelo que entendi, isso pode ser feito usando o PulseAudio. Eu também estou cavando.
Leolobato
ter um olhar para o que estamos discutindo aqui raspberrypi.org/phpBB3/...
jmp909
Sei que isso é um pouco fora de tópico - mas se você não está atrás do playbac remoto, que tal um bom DAC USB?
petr

Respostas:

13

Você pode usar os módulos mpd, pulseaudio e raop2, se necessário:

  • mpd para gerenciar playlists, biblioteca, etc ( sudo apt-get install mpd)
  • pulseaudio para gerenciar saídas de áudio: raop para AirPlay ou qualquer outro dispositivo de saída, como tomada analógica, HDMI, serviço de streaming http, etc ( sudo apt-get install pulseaudio)
  • módulo raop2 para pulseaudio se o módulo raop original incorporado no pulseaudio não funcionar

Eu tive que construir o pulseaudio a partir da fonte para obter uma versão atualizada do módulo RAOP para o pulseaudio.


Aqui está o que eu fiz para fazê-lo funcionar (pode se queixar de pacotes ausentes, apenas sudo apt-get installeles):

Instalar MPD

sudo apt-get install mpd

Instale o PulseAudio

Opção A: você possui um dispositivo AirPlay antigo ou não precisa de streaming UDP.

É mais fácil, mas menos compatível.

sudo apt-get install pulseaudio

Opção B: você deseja melhor compatibilidade e suporte para streaming TCP e UDP

Então você precisa do módulo raop2 para o pulseaudio, o que significa construir PA a partir da fonte.

Instale o git se você ainda não o criou e construa o pulseaudio (consulte as instruções oficiais ):

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

Na minha instalação, tive que ligar simbolicamente 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

ou, de acordo com sua preferência:

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

Configure tudo

Configuração inicial do MPD

Agora precisamos configurar o MPD:

sudo vi /etc/mpd.conf

Nesse arquivo, defina o seguinte:

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"

Precisamos editar a saída, mas precisamos primeiro do nome do coletor de áudio pulsea.

Dissipadores PulseAudio

É bom ter o Avahi / zeroconf porque permitirá a descoberta de dispositivos AirPlay (por meio do zeroconf / mDNS / Bonjour):

sudo apt-get install avahi

Agora podemos iniciar o pulseaudio e tentar carregar os módulos RAOP:

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

Aqui está a saída na minha instalação:

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>

Você precisa editar /etc/mpd.confnovamente e adicionar as seguintes saídas:

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

Adicione um desses blocos para cada dispositivo AirPlay para o qual você deseja transmitir música.

Configuração PulseAudio

A última parte é configurar o PA:

sudo vi /etc/pulse/client.conf

Não comentado autospawn = yes, isso fará o pulseaudio iniciar automaticamente quando necessário.

sudo vi /etc/pulse/default.pa

Adicione a seguinte linha na parte inferior:

load-module module-raop-discover

Isso fará com que o pulseaudio carregue o módulo de descoberta RAOP quando ele for iniciado.

Passo final

Deve estar funcionando agora. Inicie o MPD (pare primeiro se estiver em execução):

sudo /etc/init.d/mpd start

Espere um pouco, o RasPI leva pelo menos 10 a 15 segundos para que o daemon possa funcionar corretamente.

Atualize sua biblioteca de músicas (e aguarde o término):

sudo apt-get install mpc
mpc update

Habilite as saídas à vontade (a seguir listará as saídas MPD configuradas e habilite a primeira):

mpc outputs
mpc enable 1

Agora use seu cliente MPD favorito para tocar música. Estou usando ncmpcppna linha de comando e o MPDroid no meu telefone / tablet.

Solução de problemas

Inicie o mpd em verbose, pulseaudio com nível máximo de log e monitore os logs:

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

Tente fazer o pulseaudio funcionar primeiro. Basta carregar o pulseaudio, carregar o módulo de descoberta RAOP, listar as pias, configurar o coletor padrão e tentar reproduzir algo:

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

Depois de ter o pulseaudio funcionando, tente fazer o MPD funcionar com ele.

Benoit Duffez
fonte
1
Era exatamente o que eu estava procurando! Eu tenho um mopidy rodando em um Raspberry Pi. Vou tentar isso e atualizar para dizer se funcionou!
Leolobato
2

Parece que pulseaudio-module-raop é o que você está procurando. Este guia tem uma descrição detalhada de como configurar isso no Ubuntu.

Lukas Vermeer
fonte
1
De um modo geral, uma resposta que fornece explicações detalhadas é melhor que um link. Os links podem se mudar ou morrer. Mais importante, explicando um pouco sobre pulseaudio-module-raop pode ser uma boa idéia ..
ramblinjan
2

Passei algum tempo tentando configurar o Airplay através do Raop / PulseAudio no novo Raspberry Pi 3 usando o Raspbian Jessie com muito pouco sucesso. Eu recomendo o forked-daapd :

Esta é uma versão muito atualizada do forked-daapd 0.19 original, um servidor de mídia Linux / FreeBSD DAAP (iTunes) com suporte para dispositivos AirPlay, Apple Remote (e compatíveis), MPD, Spotify, mp3 streaming e rádio na Internet.

A instalação foi muito simples e eu tive a coisa toda em funcionamento em cerca de 10 minutos. Aqui estão as instruções de instalação, conforme detalhado aqui :

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
fonte