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 $BTSOURCE
pelo nome da fonte do seu dispositivo Bluetooth como visto pelo PulseAudio, por exemplo bluez_source.14_DA_E9_2A_D7_57
; e substitua $SINK
pelo 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-stereo
Você 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
$SINK
com pactl list sinks
, é mostrado depoisName:
- Da mesma forma, você pode ver o
$BTSOURCE
compactl list sources
- O
source_dont_move
argumento 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=yes
argumento, 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 $BTSOURCE
pelo 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.