Soy nuevo en Linux y nuevo en las secuencias de comandos de Bluetooth también. Lo que he descubierto hasta ahora es lo siguiente:
- Bluez es la pila BT predeterminada.
- BluezTools es un conjunto de utilidades que puedes usar para interactuar más fácilmente con Bluez
- DBus es la interfaz a la que se conecta Bluez mientras interactúa directamente con el hardware.
- PulseAudio es el subsistema responsable de producir audio en el sistema.
Esto tiene sentido. Entonces, supongamos que tengo un conjunto de auriculares BlueTooth, lo que esperaría es (todo después de emparejar y confiar), para poder emitir un comando que se pueda conectar directamente a un cierto perfil en los auriculares BT.
La ruta técnica que tengo en mente sería algo así como:
- Enciende los auriculares.
- Emita un comando de BluezTools, como bt-audio -c
- Espere a que el dispositivo se conecte al servicio que busco
- PulseAudio ahora debería recoger un nuevo dispositivo de salida
- Emita otro comando para cambiar el audio de lo que era al nuevo audio de salida (los auriculares BT).
- Disfruta de una experiencia auditiva perfecta.
Todo esto parece lógico, pero la implementación real no es así, y estoy buscando el POR QUÉ, así puedo entender mejor el problema e intentar solucionarlo.
Esto es lo que realmente sucede:
- Enciende los auriculares.
- Emita un comando de BluezTools, como bt-audio -c
- Espere a que el dispositivo se conecte al servicio que busco
- PulseAudio ahora debería recoger un nuevo dispositivo de salida
- Emita un comando PulseAudio para cambiar el perfil de audio de la calidad del teléfono a alta fidelidad.
Permítanme ampliar esto un poco. El auricular bluetooth ofrece 2 modos de calidad (teléfono y alta fidelidad). Solo 1 es realmente adecuado para escuchar música.
Esperaría que los auriculares BT expongan cada modo de calidad como un servicio, ¿es así? Esta suposición podría estar equivocada, pero esperaría algo como
bt-audio -c highFidelityProfile
o
bt-audio -changeProfile highFidelityProfile
En cambio, parece que Bluez solo maneja la conexión RAW al dispositivo, y desde allí debe emitir un: pacmd set-card-profile $ INDEX a2dp
Esto simplemente parece fundamentalmente incorrecto. ¿Por qué el control de calidad en el subsistema de audio requiere una implementación diferente para pulse o alsa, o cualquier otro subsistema de sonido?
¿Qué me estoy perdiendo? ¿Por qué no es posible conectarse directamente a un perfil determinado usando Bluez / BluezTools, etc.?