Posso usar meu computador como um receptor A2DP / alto-falante bluetooth?

40

Primeiro, o problema: estou usando um MP3 player Cowon como meu principal player de música com tampões básicos.

Ele oferece A2DP e eu gostaria que meu netbook (executando o UNE 10.04) atuasse como receptor.

Alguns recursos na web sobre o a2dp, mas a maioria está desatualizada:

Pierre-Yves Gillier
fonte

Respostas:

47

Para usar sua máquina Ubuntu como um dispositivo Bluetooth a2dp, você deve primeiro configurá-lo para registrar-se como um terminal "a2dp sink".

O pacote bluez no Ubuntu (10.04 e superior) inclui um utilitário chamado sdptool que pode ser usado para verificar se um dispositivo Bluetooth está configurado como um coletor a2dp ou não. Aqui está a saída do sdptool executada no meu fone de ouvido Bluetooth (o endereço está sendo retirado da caixa de diálogo "Configurações do Bluetooth" no centro de controle do gnome):

$ sdptool search --bdaddr 00:18:16:3A:3B:D4 a2snk
Searching for a2snk on 00:18:16:3A:3B:D4 ...
Service RecHandle: 0x10002
Service Class ID List:
  "Audio Sink" (0x110b)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 25
  "AVDTP" (0x0019)
    uint16: 0x102
Profile Descriptor List:
  "Advanced Audio" (0x110d)
    Version: 0x0102

$

e aqui está a saída quando executada na minha máquina Ubuntu local:

$ sdptool search --bdaddr local a2snk
Searching for a2snk on FF:FF:FF:00:00:00 ...
$

Isso mostra que a máquina Ubuntu não está se anunciando como um coletor a2dp. No entanto, ele está anunciando como uma fonte a2dp:

$ sdptool search --bdaddr local a2src
Searching for a2src on FF:FF:FF:00:00:00 ...
Service Name: Audio Source
Service RecHandle: 0x10003
Service Class ID List:
  "Audio Source" (0x110a)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 25
  "AVDTP" (0x0019)
    uint16: 0x102
Profile Descriptor List:
  "Advanced Audio" (0x110d)
    Version: 0x0102

Isso permite que a máquina Ubuntu emparelhe corretamente com o fone de ouvido como fonte de áudio, mas não permite usar a máquina Ubuntu como saída (coletor) de áudio Bluetooth.

Se você editar /etc/bluetooth/audio.conf, poderá ativar o suporte ao coletor a2dp adicionando esta linha abaixo da [General]seção:

  Enable=Source

Os dois são nomeados de maneira contra-intuitiva - já que estamos adicionando aqui suporte a coletor Bluetooth, não a fonte - e em contradição com o comentário neste arquivo que afirma que todos os serviços implementados estão ativados por padrão. :(

Depois de fazer essa alteração, você precisará reiniciar o bluetoothd executando sudo service bluetooth restart.

Se você emparelhou anteriormente seu dispositivo Android e o computador Ubuntu ao tentar obter este trabalho, será necessário excluir o emparelhamento dos dois lados e emparelhá-los novamente para que o Android reconheça o Ubuntu como um dispositivo de áudio disponível.

Depois de fazer isso, o dispositivo Android deve aparecer como um dispositivo de entrada no PulseAudio. Se o PulseAudio não detectar a nova fonte de áudio Bluetooth, pode ser necessário instalar e carregar o módulo Bluetooth, na linha de comando:

 sudo apt-get install pulseaudio-module-bluetooth
 pactl load-module module-bluetooth-discover

Em seguida, você precisa informar ao PulseAudio para direcionar essa entrada de áudio para sua saída / coletor (como os alto-falantes ou um fone de ouvido Bluetooth) usando uma conexão de loopback (uma linha reta de uma fonte para um coletor).

Versões posteriores do PulseAudio podem ter políticas de módulo bluetooth incluídas e ele já pode ter configurado um dispositivo de loopback para você, mas esse não parece ser o caso mais comum.

Uma maneira semi-automática de configurar a conexão de loopback - se você também tiver o programa GUI pavucontrol instalado - é simplesmente carregar o módulo de loopback e configurá-lo usando o pavucontrol, pois o PulseAudio lembrará as configurações. O carregamento do módulo é feito a partir do comando usando pactl:

 pactl load-module module-loopback

Não tema se você não ouvir nada ainda, ou se receber efeitos de feedback estranhos, precisamos informar ao dispositivo recém-criado de qual fonte obter entrada e qual coletor para enviar a saída primeiro.

Abra o pavucontrol e abra a guia Configuration. Verifique se o dispositivo Bluetooth aparece aqui (depois de emparelhá-lo usando o blueman-manager ou outra ferramenta Bluetooth) e se o perfil está definido como A2DP. Alterne para a guia Dispositivos de entrada e verifique se o dispositivo também aparece aqui e se não está sem som. Agora mude para a guia Gravação e faça com que a conexão de loopback recém-criada use seu dispositivo como fonte com a caixa de seleção ao lado do botão mudo. Alterne para a guia Reprodução para selecionar o coletor que a conexão de loopback deve usar da mesma maneira. Se o dispositivo de loopback não aparecer nas guias, verifique se todos os fluxos são exibidos usando a caixa de seleção na parte inferior de cada guia.

Agora você deve ouvir o áudio do seu dispositivo, se estiver sendo reproduzido, nos alto-falantes ou em qualquer saída que você selecionar. Quando o dispositivo é desconectado, o dispositivo de loopback faz o fallback para um coletor e uma fonte disponíveis, o que pode não ser desejável; portanto, mude o dispositivo de loopback até precisar dele. A conexão de loopback restaurará o mesmo coletor / fonte na próxima vez que o mesmo dispositivo Bluetooth for conectado, graças ao módulo - * - módulos de restauração.

Se isso não funcionar , ou você não tiver o pavucontrol instalado, poderá configurar o loopback usando o seguinte método:

 pactl load-module module-loopback source_dont_move=yes source=$BTSOURCE sink=$SINK

(Substitua $BTSOURCEpelo nome da fonte do seu dispositivo Bluetooth como visto pelo PulseAudio, por exemplo bluez_source.14_DA_E9_2A_D7_57; e substitua $SINKpelo nome da saída do PulseAudio para a qual você deseja enviar o fluxo de áudio, por exemplo: alsa_output.pci-0000_00_1b.0.analog-stereoVocê pode deixar de fora o argumento do coletor e fazer com que ele se recupere para uma pia ativa e altere-a posteriormente via pavucontrol.)

  • Você pode encontrar $SINKcom pactl list sinks, é mostrado depoisName:
  • Da mesma forma, você pode ver o $BTSOURCEcompactl list sources
  • O source_dont_moveargumento impede que a conexão de loopback volte para outra fonte de áudio quando o dispositivo Bluetooth estiver desconectado. Em vez disso, ele é removido e você precisará configurá-lo novamente na próxima vez.

Veja como um exemplo seria (lembre-se de substituir o :por _no endereço Bluetooth!):

pactl load-module module-loopback source_dont_move=yes source=bluez_source.14_DA_E9_2A_D7_57 sink=alsa_output.pci-0000_00_14.2.analog-stereo

Se o carregamento do módulo fallback falhar, tente remover o source_dont_move=yesargumento, que foi disponibilizado primeiro na versão 1.0. No entanto, tenha cuidado ao remover essa conexão de loopback antes de soltar esse áudio ou, por exemplo, se o microfone do seu laptop estiver sem som, você poderá receber um feedback muito ruim. Para descartar essa conexão de loopback manualmente quando terminar, execute:

pactl unload-module $(pactl list short modules | grep "loopback.*$BTSOURCE" | cut -f1)

Mais uma vez, substitua $BTSOURCEpelo nome da fonte PulseAudio que se refere ao seu dispositivo Bluetooth. Você também pode descarregar o módulo usando o ID retornado pelo comando load-module:

$ pactl load-module module-loopback source_dont_move=yes source=bluez_source.14_DA_E9_2A_D7_57 sink=alsa_output.pci-0000_00_14.2.analog-stereo
15
$ pactl unload-module 15

Referências:

  • Postagem em blog descrevendo alguns dos detalhes de como isso está sendo corrigido no Ubuntu.
slangasek
fonte
podemos muda o mapa de canal para um determinado dispositivo dissipador
Prakash V Holkar
oi e obrigado pelo guia detalhado. O comando pactl load-module module-bluethooth-discoverfalha no ubuntu studio 14.04. Portanto, não vejo nenhuma bluezfonte pulseaudio, mesmo que meu telefone veja corretamente o PC como um coletor de áudio. Alguma ideia?
Nass
se pactl list sources shortnão mostrar a fonte bluez para você, encontrei duas soluções possíveis: chame gdbus call --system --dest org.bluez --object-path /org/bluez/XXX/hci0/dev_XX_XX_XX_XX_XX_XX --method org.bluez.AudioSource.Connectwhere (o caminho inclui o endereço BD do dispositivo e o caminho do adaptador com o qual você pode encontrar gdbus call --system --dest org.bluez --object-path / --method org.bluez.Manager.DefaultAdapter). Ou use d-feet como explicado aqui . Caso contrário, conecte no lado do telefone e comece a tocar alguma coisa.
Treviño 25/03
Ainda não vejo nenhuma fonte do bluez aparecendo. Linux Mint 17.3 "Rosa" aqui.
precisa saber é o seguinte
11
Uau! com mudanças mínimas (/etc/bluetooth/main.conf em vez de audio.conf), isso funciona no Rasbian. Obrigado (nenhuma configuração de auto-retorno é necessária em que OS)!
Jamie
13

Eu uso o blueman, instalado no centro de software Ubuntu. Clique com o botão direito do mouse no ícone blueman * -> "serviços locais" -> áudio-> Marque a opção "recepção avançada de áudio". Btw eu usá-lo para ouvir no meu laptop Ubuntu 11.10 o que eu jogo no meu telefone Android.

* O ícone blueman é mostrado no canto inferior direito no shell gnome + ubuntu 11.10, esse é o meu caso. Espero que isso seja útil de alguma forma para você.

user47059
fonte
A interface de configuração do blueman para áudio define apenas o valor Enable = Source em /etc/bluetooth/audio.conf, então não vejo como isso permitiria que o Android usasse um computador como saída de áudio.
slangasek
ok, então se eu definir isso em audio.conf e depois desemparelhar de ambos os lados da ligação, que parece ser o suficiente para deixar Android ver o computador como um dissipador de áudio depois de tudo ...
slangasek
Eu tentei isso e não consegui reconhecê-lo como o coletor de áudio. : - /
Jorge Castro
O blueman trabalhou para mim no 12.04 com zero problemas além do fato de eu ter acabado com dois ícones de bluetooth no meu applet de indicador.
HDave
7

É realmente simples agora no Ubuntu 12.04

Conecte seu dispositivo bluetooth

Procure o seu dispositivo bluetooth e anote o número da fonte:

pactl list sources 

Faça um loopback para o dispositivo bluetooth:

pactl load-module module-loopback source=$SOURCE_NUMBER  

Onde $ SOURCE_NUMBER é o número que você anotou anteriormente.

Por exemplo, digitei o seguinte para fazer com que a reprodução de áudio funcione:

$ pactl load-module module-loopback source=3  

É isso aí! Achei a solução na resposta superior um pouco complicada, então a simplifiquei dessa maneira (muito menos digitação e cópia / colagem). Embora minha solução provavelmente seja interrompida se você remover qualquer dispositivo de áudio listado antes do dispositivo bluetooth por pactl list sources.

Além disso, não se esqueça de remover o módulo de loopback antes de desconectar o dispositivo bluetooth:

Anote o número do módulo do dispositivo de loopback que você criou:

pactl list short modules

Remova o dispositivo de loopback:

pactl unload-module $MODULE_NUMBER

As respostas anteriores foram escritas antes do lançamento do 12.04, então eu tenho certeza que houve algumas mudanças. Por exemplo, eu não precisei ativar manualmente o uso de dispositivos bluetooth como fonte de áudio (ela foi ativada por padrão). No entanto, às vezes tenho que alternar o perfil "Media Audio" nas configurações de bluetooth do meu telefone (Samsung Captivate executando o CyanogenMod 9.1.0).

Provavelmente existe uma maneira de alavancar o dbus-monitor usando um script de shell para observar as conexões do dispositivo A2DP bluetooth e carregar automaticamente um módulo de loopback, mas isso é um pouco demais.

Espero que não precisemos mais fazer isso manualmente no Ubuntu 12.10.

Toasty
fonte
Após o carregamento do módulo com auto-retorno para pias particulares, que podem alterar o mapa de canal de módulo com auto-retorno de dispositivo específico para a esquerda ou para a direita
Prakash V Holkar
3

Para o 13.04, emparelhe o seu dispositivo de origem com o laptop ubuntu e ele simplesmente funciona! Muito legal descobrir que agora era fácil.

user184485
fonte
2

No Ubuntu 16.04, isso funciona imediatamente.

mniess
fonte
Mesmo, embora o seguinte bug (não relatado) o tenha interrompido, capturado no diário do sistema: askubuntu.com/questions/689281/…
ThorSummoner
0

Solução ainda mais fácil que a resposta.

Você pode simplesmente ir

sudo apt-get install pulseaudio*

Então reinicie. Após a reinicialização, conecte-se ao seu Bluetooth e simplesmente toque a música no seu telefone. Tudo será transmitido ao seu computador e reproduzido nos alto-falantes do computador.

E sim! de nada.

Adel Abula - MageBinary
fonte
apt-getusa expressões regulares, não curingas. Portanto, você não tem idéia do que será instalado usando pulseaudio*(dica: não são apenas os pacotes que começam com pulseaudi). E o PulseAudio já faz parte da instalação padrão do Ubuntu.
Muru
Sim! Mas isso funcionará para todas as pessoas preguiçosas que desejam que as coisas funcionem instantaneamente.
Adel Abula - MageBinary