Antes de leer este artículo, se recomienda que lea el artículo anterior: Audio a través de Bluetooth: tanto como sea posible sobre perfiles, códecs y dispositivos / en inglésAlgunos usuarios de auriculares inalámbricos notan una calidad de audio deficiente y una falta de frecuencias altas cuando usan el códec SBC Bluetooth estándar, que admite todos los dispositivos de audio. Una recomendación frecuente para mejorar el sonido es comprar dispositivos y auriculares que admitan códecs aptX y LDAC. Estos códecs requieren tarifas de licencia, por lo que los dispositivos con su soporte son más caros.
Resulta que la baja calidad de SBC se debe a las limitaciones artificiales de las pilas de Bluetooth y la configuración de los auriculares, y esta restricción se puede eludir en cualquier dispositivo existente mediante cambios de software en un teléfono inteligente o computadora.
Códec SBC
El códec SBC tiene muchos parámetros diferentes que son consistentes durante la fase de configuración de la conexión. Entre ellos están:
- Número y tipo de canales: estéreo conjunto, estéreo, doble canal, mono;
- Número de bandas de frecuencia: 4 u 8;
- El número de bloques en el paquete: 4, 8, 12, 16;
- Algoritmo de asignación de bits de cuantización: sonoridad, SNR;
- Valor máximo y mínimo del conjunto de bits utilizados en la cuantización (conjunto de bits): generalmente, de 2 a 53.
El dispositivo de decodificación debe admitir cualquier combinación de estos parámetros. El codificador puede no implementar todo.
Las pilas Bluetooth existentes, por regla general, acuerdan el siguiente perfil: Conjunto estéreo, 8 bandas, 16 bloques, Loudness, bitpool 2..53. Este perfil codifica audio de 44,1 kHz con una velocidad de bits de 328 kbps.
El parámetro bitpool afecta directamente a la tasa de bits dentro de un solo perfil: cuanto mayor es, mayor es la tasa de bits y, por lo tanto, la calidad.
Sin embargo, el parámetro bitpool no está vinculado a un perfil específico; Otros parámetros también tienen un impacto en la velocidad de bits: tipo de canales, número de bandas de frecuencia, número de bloques. Puede aumentar la tasa de bits indirectamente negociando perfiles no estándar sin cambiar la agrupación de bits.
Fórmula de tasa de bits SBCPor ejemplo, el modo Dual Channel codifica canales por separado, utilizando el conjunto de bits completo para cada canal. Al obligar al dispositivo a usar Dual Channel en lugar de Joint Stereo, obtenemos una tasa de bits casi doble con el mismo valor máximo de bitpool: 617 kbps.
En mi opinión, el uso de un valor de bitpool sin perfil en la etapa de aprobación es una falla en el estándar A2DP, lo que condujo a una limitación artificial de la calidad de SBC. Sería más inteligente acordar bitrate, no bitpool.
Estos valores fijos, Bitpool y Bitrate, se originan en una tabla con valores recomendados para audio de alta calidad. Pero la recomendación no es una razón para limitarse a estos valores.

La especificación A2DP v1.2, que estuvo activa de 2007 a 2015, requiere que todos los dispositivos de decodificación funcionen correctamente con velocidades de bits de hasta 512 kbps:
El decodificador del SNK admitirá todos los posibles valores de agrupación de bits que no den como resultado una velocidad de bits máxima. Este perfil limita la velocidad de bits máxima disponible a 320 kb / s para mono y 512 kb / s para modos de dos canales.
No hay límite de velocidad de bits en la nueva versión de la especificación. Se supone que los auriculares modernos lanzados después de 2015 y que admiten EDR pueden admitir velocidades de bits de hasta 30730 kbps.
Por alguna razón, las pilas de Bluetooth de Linux que probé (PulseAudio), Android, Blackberry y macOS tienen limitaciones artificiales en el valor máximo del parámetro bitpool, que afecta directamente a la tasa de bits máxima. Pero este no es el mayor problema, casi todos los auriculares también limitan el valor máximo de bitpool a 53.
Como ya me las arreglé para asegurarme, la mayoría de los dispositivos funcionan bien en una pila Bluetooth modificada con una velocidad de bits de 551 kbit / s, sin interrupciones y crujidos. Pero dicha tasa de bits nunca se negociará en condiciones normales, en pilas Bluetooth normales.
Modificar la pila de Bluetooth
Cualquier pila Bluetooth que sea compatible con el estándar A2DP tiene soporte para el modo de doble canal, pero no es posible activarlo desde la interfaz.
¡Agreguemos un interruptor a la interfaz! Hice parches para Android 8.1 y Android 9 que agregan soporte completo para Dual Channel a la pila, agregan modo al menú de cambio de modo en las herramientas de desarrollador y procesan SBC con soporte de doble canal como si fuera un códec adicional como aptX, AAC o LDAC ( Android lo llama HD Audio) agregando una marca de verificación a la configuración del dispositivo Bluetooth. Así es como se ve:
Parche para Android 9Parche para Android 8.1Cuando la casilla de verificación está activada, el audio Bluetooth comienza a transmitirse con una tasa de bits de
551 kbps si los auriculares admiten una conexión a 3 Mbps, o
452 kbps si los auriculares solo admiten 2 Mbps.
Este parche se incluye en el siguiente firmware alternativo:
- LineageOS
- Remix de resurrección
- crDroid
¿De dónde provienen 551 y 452 kbit / s?
La tecnología Bluetooth de aire dividido está diseñada para transferir eficientemente grandes paquetes de tamaño fijo. Los datos se transmiten por ranuras, la mayor cantidad de ranuras enviadas en una transmisión es 5. También hay modos de transmisión que usan 1 o 3 ranuras, pero no 2 o 4. En 5 ranuras, puede transferir hasta 679 bytes a una velocidad de conexión de 2 Mbps y hasta 1021 bytes a una velocidad de 3 Mbps, y en 3 - 367 y 552 bytes, respectivamente.

Si queremos transferir menos datos de 679 o 1021 bytes, pero más de 367 o 552 bytes, la transferencia seguirá teniendo 5 ranuras, y los datos se transmitirán al mismo tiempo, lo que reduce la eficiencia de transmisión.

SBC en modo de doble canal, en audio de 44100 Hz con parámetros de Bitpool 38, 16 bloques por cuadro, 8 rangos de frecuencia, codifica el audio en cuadros de 164 bytes de tamaño, con una tasa de bits de 452 kbps.
El audio debe estar encapsulado en los protocolos de transferencia L2CAP y AVDTP, que toman 16 bytes de la carga útil de audio.
\ begin {align *} framelength & = 4 + \ frac {subbands \ times canales} {2} + \\ & \ begin {cases} \ frac {blocks \ times canales \ times bitpool} {8} & \ text { si el modo mono o doble canal} \\ \ frac {subbands + blocks \ times bitpool} {8} & \ text {if modo estéreo conjunto} \\ \ frac {blocks \ times bitpool} {8} & \ text {if stereo modo} \\ \ end {cases} \ end {align *}
Por lo tanto, en una transmisión Bluetooth con 5 ranuras, es posible acomodar 4 cuadros de audio:
679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 ( SBC) - (164*4) = 6
Ponemos 11.7 ms de datos de audio en el paquete de envío, que se transmitirá en 3.75 ms, y tenemos 6 bytes no utilizados en el paquete.
Si aumenta ligeramente la agrupación de bits, ya no se pueden empaquetar 4 cuadros de audio en un solo paquete. Tendrá que enviar 3 cuadros a la vez, lo que reduce la eficiencia de la transmisión, reduce la cantidad de audio transmitido por un paquete y conducirá rápidamente a un tartamudeo de audio en malas condiciones de radio.
Del mismo modo, se seleccionó una velocidad de bits de 551 kbit / s para un EDR de 3 Mbps: con Bitpool 47, 16 bloques en una trama, 8 rangos de frecuencia, el tamaño de la trama es de 200 bytes, con una tasa de bits de 551 kbit / s. 5 cuadros o 14,6 ms de música cabe en un paquete.
El algoritmo para calcular todos los parámetros SBC es bastante complicado, puede confundirse fácilmente si cuenta manualmente, por lo que hice una calculadora interactiva para ayudar a los interesados:
btcodecs.valdikss.org.ru/sbc-bitrate-calculator¿Por qué es todo esto necesario?
Contrariamente a la creencia popular sobre la calidad de sonido del códec aptX, puede producir peores resultados en algunos archivos que SBC con una velocidad de bits estándar de 328 kbps.
SBC asigna dinámicamente bits de cuantificación para bandas de frecuencia, operando de "abajo hacia arriba". Si se utilizó la tasa de bits completa para las frecuencias bajas y medias, las frecuencias más altas se "cortarán" (en su lugar habrá silencio).
aptX cuantifica las bandas de frecuencia con el mismo número de bits constantemente, por lo que tiene una tasa de bits constante: 352 kbit / s para 44,1 kHz, 384 kbit / s para 48 kHz, y no puede "transferir bits" a esas frecuencias más necesitado de ellos. A diferencia de SBC, aptX no "cortará" las frecuencias, sino que les agregará ruido de cuantificación, reduciendo el rango dinámico del audio y, a veces, introduciendo crepitaciones características. SBC, por otro lado, "se come los detalles" - descarta las áreas más tranquilas.
En comparación con el SBC 328k, en promedio, aptX introduce menos distorsión a la música con un amplio rango de frecuencia, pero a veces gana en la música con un rango de frecuencia estrecho y un amplio rango dinámico.
Considere un caso especial. Espectrograma para grabar el piano:

La energía principal reside en las frecuencias de 0 a 4 kHz, y dura hasta 10 kHz.
El espectrograma del archivo comprimido en aptX es el siguiente:

Y así se ve SBC 328k.

Se puede ver que el SBC 328k periódicamente apaga completamente el rango por encima de 16 kHz, y gasta toda la tasa de bits disponible en los rangos por debajo de este valor. Sin embargo, aptX introdujo más distorsión en el espectro de frecuencia escuchado por el oído humano, que se puede ver en el espectrograma original sustraído del espectrograma aptX (cuanto más brillante, más distorsión):

Mientras que el SBC 328k menos desordena la señal en el rango de 0 a 10 kHz, y corta el resto -

La tasa de bits de 485k SBC fue suficiente para guardar todo el rango de frecuencia, sin desconectar las bandas.

SBC 485k en esta composición está significativamente por delante de aptX en el rango de 0-15 kHz, y con una diferencia menor pero aún notable: 15-22 kHz (cuanto más oscura, menos distorsión):
Archivo de audio original, SBC y aptX .
Al cambiar al SBC de bits altos, obtendrá un sonido, a menudo superior a aptX, en cualquier auricular. En los auriculares que admiten una conexión EDR de 3 Mbps, la velocidad de bits de 551 Kbps produce un sonido comparable al aptX HD.
¿Puedo tener más?
El parche para Android también tiene una opción para aumentar aún más la tasa de bits para dispositivos EDR de 2 Mbps. Puede aumentar la velocidad de bits de 452 kbps a 595 kbps, a costa de reducir la estabilidad de la transmisión en condiciones de radio complejas.
Simplemente configure la variable persist.bluetooth.sbc_hd_higher_bitrate en 1:
# setprop persist.bluetooth.sbc_hd_higher_bitrate 1
El parche de bitrate extremo hasta ahora solo se ha aceptado en LineageOS 15.1, pero no en 16.0.
Compatibilidad del dispositivo
SBC Dual Channel es compatible con casi todos los auriculares, altavoces y unidades principales del automóvil. Esto no es sorprendente: el estándar prescribe su soporte en cualquier dispositivo de decodificación. Hay un pequeño número de dispositivos en los que este modo causa problemas, pero estas son instancias únicas.
Se pueden encontrar más detalles sobre dispositivos compatibles en
w3bsit3-dns.com o
xda-developers .
Comparación de diferencias sonoras
Hice un servicio web que codifica audio en SBC (así como aptX y aptX HD) en tiempo real, directamente en el navegador. Con él, puede comparar el sonido de varios perfiles SBC y otros códecs, sin transmitir audio a través de Bluetooth, en ningún auricular con cable, altavoces y su música favorita, así como cambiar la configuración de codificación directamente durante la reproducción de audio.
btcodecs.valdikss.org.ru/sbc-encoderPóngase en contacto con desarrolladores de Android
Escribí a muchos desarrolladores de la pila Bluetooth de Google con una solicitud para considerar la inclusión de parches en la rama principal de Android, AOSP, pero no recibí una sola respuesta. Mis parches en
el sistema de parches Gerrit para Android también se han dejado sin comentarios por parte de nadie involucrado.
Me alegraría si me ayudaran en relación con los desarrolladores de Google y la implementación de SBC HD en Android. El parche gerrit ya está desactualizado (esta es una de las primeras revisiones), y lo actualizaré si los desarrolladores están interesados en mis cambios (no es fácil para mí actualizarlo, no tengo dispositivos compatibles con Android Q).
Conclusión
Los usuarios de teléfonos inteligentes con LineageOS, Resurrection Remix y el firmware crDroid pueden estar contentos con una calidad de sonido mejorada ahora, solo active la opción en la configuración del dispositivo Bluetooth. Los usuarios de Linux también pueden obtener una mayor tasa de bits SBC instalando un
parche de Pali Rohár , que, entre otras cosas, agrega soporte para códecs aptX, aptX HD y FastStream.