Também sou novo no Linux e também no script Bluetooth. O que eu descobri até agora é o seguinte:
- Bluez é a pilha BT padrão.
- BluezTools é um conjunto de utilitários que você pode usar para interagir mais facilmente com o Bluez
- DBus é a interface à qual o Bluez se conecta enquanto interage diretamente com o hardware.
- PulseAudio é o subsistema responsável pela produção de áudio no sistema.
Isso faz sentido. Então, digamos que eu tenho um conjunto de fones de ouvido BlueTooth, o que eu esperaria é (tudo depois de emparelhar e confiar), para poder emitir um comando que possa se conectar diretamente a um determinado perfil nos fones de ouvido BT.
O caminho técnico que tenho em mente seria algo como:
- Ligue os fones de ouvido.
- Emita um comando BluezTools - como bt-audio -c
- Aguarde o dispositivo se conectar ao serviço que estou procurando
- PulseAudio agora deve pegar um novo dispositivo de saída
- Emita outro comando para alterar o áudio do que era para o novo áudio de saída (os fones de ouvido BT).
- Desfrute de uma experiência auditiva contínua.
Tudo isso parece lógico, mas a implementação real não é assim, e estou procurando o PORQUE, para entender melhor o problema e tentar corrigi-lo.
Isto é o que realmente acontece:
- Ligue os fones de ouvido.
- Emita um comando BluezTools - como bt-audio -c
- Aguarde o dispositivo se conectar ao serviço que estou procurando
- PulseAudio agora deve pegar um novo dispositivo de saída
- Emita um comando PulseAudio para alterar o perfil de áudio da qualidade do telefone para alta fidelidade.
Deixe-me expandir um pouco isso. O fone de ouvido bluetooth oferece 2 modos de qualidade (telefone e alta fidelidade). Apenas 1 é realmente adequado para ouvir música.
Eu esperaria que os fones de ouvido da BT expusessem cada modo de qualidade como um serviço, está certo? Essa suposição pode estar errada, mas eu esperaria algo como
bt-audio -c highFidelityProfile
ou
bt-audio -changeProfile highFidelityProfile
Em vez disso, parece que o Bluez apenas lida com a conexão RAW com o dispositivo e, a partir daí, é necessário emitir um: pacmd set-card-profile $ INDEX a2dp
Isso parece fundamentalmente errado. Por que o controle de qualidade no subsistema de áudio exige uma implementação diferente para pulse ou alsa ou qualquer outro subsistema de som existente?
o que estou perdendo? Por que não é possível conectar-se diretamente a um determinado perfil usando o Bluez / BluezTools etc?