Com es poden modificar les piles de Bluetooth a Android per obtenir una qualitat d’àudio Bluetooth molt millorada



Proveu El Nostre Instrument Per Eliminar Problemes

Advertiment: es tracta d’una guia molt avançada que consisteix a modificar les vostres piles de Bluetooth a Android; llegiu aquesta guia en la seva totalitat i seguiu totes les instruccions tal com s’indiquen.



Tot i que els auriculars Bluetooth i l’àudio Bluetooth han esdevingut força populars, és un problema per als audiòfils, ja que s’ha demostrat que Bluetooth redueix la qualitat de l’àudio, ja que els fragments de la informació i les freqüències d’àudio es perden a l’aire per la transmissió Bluetooth.



És per això que alguns fabricants publiquen còdecs aptX i LDAC per millorar la qualitat del so respecte al còdec estàndard SBC Bluetooth, que és compatible amb tots els auriculars i la majoria de dispositius Bluetooth, però els dispositius amb còdecs aptX i LDAC són molt més cars perquè aquests còdecs requereixen taxes de llicència, que el consumidor paga a la llarga.



La baixa qualitat d’àudio del còdec SBC Bluetooth és causada per limitacions artificials de la configuració actual de totes les piles i auriculars Bluetooth actuals, i aquesta limitació es pot eludir en qualsevol dispositiu existent.

Si us interessa l’àudio Bluetooth, al final d’aquesta guia us mostrarem com fer un buidatge de registre d’àudio Bluetooth i inspeccionar-lo per veure quin tipus de qualitat i freqüència d’àudio obteniu del receptor Bluetooth del vostre Android.

La majoria d’aquesta guia se centrarà en alguns senzills ajustaments i maneres de llegir la sortida d’àudio Bluetooth per millorar la qualitat de sortida dels còdecs estàndard Bluetooth SBC. Llegiu atentament aquesta guia sencera, ja que és bastant educativa i hi ha moltes coses diferents. per parpellejar o ajustar, segons el model del dispositiu.



En aquest final d’aquesta guia, es mostra una llista de piles Bluetooth pre-pegades per a molts dels dispositius Android més populars: es poden recuperar en flash de la mateixa manera que ho faríeu amb qualsevol altre .zip flashable. Si cap dels vostres dispositius us pertany, tindreu per seguir la guia per modificar les piles Bluetooth a Android.

Breu informació tècnica sobre el còdec SBC

SBC té molts paràmetres diferents que es negocien durant la fase de configuració de la connexió:

  • Tipus i número de canal d'àudio: estèreo conjunt, estèreo, doble canal, mono;
  • Nombre de bandes de freqüència: 4 o 8;
  • Nombre de blocs d'àudio en un paquet: 4, 8, 12, 16;
  • Algorisme d’assignació de bits de quantització: Loudness, SNR;
  • Agrupació de bits màxima i mínima utilitzada en el procés de quantificació: normalment de 2 a 53.

El descodificador és necessari per admetre qualsevol combinació d'aquests paràmetres. El codificador només pot implementar una part d'ells.

Les piles Bluetooth existents solen negociar el següent perfil: Joint Stereo, 8 bandes, 16 blocs, Loudness, bitpool 2..53. Aquest perfil codifica àudio de 44,1 kHz amb una velocitat de bits de 328 kbps.

El paràmetre Bitpool afecta directament la taxa de bits dins del mateix perfil: com més alta és, més alta és la taxa de bits i, per tant, la qualitat.

Tanmateix, el paràmetre pool de bits no està lligat a un perfil específic. La taxa de bits també es veu afectada significativament per altres paràmetres: tipus de canal d'àudio, nombre de bandes de freqüència, nombre de blocs d'àudio. Podeu augmentar la taxa de bits indirectament negociant perfils no estàndard, sense canviar el grup de bits.

Per exemple, Dual Channel codifica els canals per separat, utilitzant tota la piscina de bits per a cada canal. Si obligueu el dispositiu a utilitzar Dual Channel en lloc de Joint Stereo, obtindrem una velocitat de bits gairebé doblada al mateix pool de bits màxim, 617 kbps.

A mi em sembla que el bitpool hauria de ser una variable interna. És un error de disseny de l’especificació A2DP que el valor del pool de bits no està lligat a altres paràmetres del còdec i només es defineix com un valor global.

Aquests valors fixos de Bitpool i Bitrate s'originen a partir dels valors recomanats per a àudio d'alta qualitat. Però la recomanació no és una excusa per limitar el perfil a aquests valors.

L'especificació A2DP v1.2, que va estar activa del 2007 al 2015, requereix que tots els descodificadors funcionin correctament amb velocitats de bits de fins a 512 kbps:

El descodificador de l'SNK suporta tots els possibles valors de grup de bits que no resultin en l'excés de la velocitat de bits màxima. Aquest perfil limita la velocitat de bits màxima disponible a 320 kb / s per a mono i a 512 kb / s per a modes de dos canals.

A la nova versió de l'especificació no hi ha limitació de la taxa de bits. Se suposa que els auriculars moderns llançats després del 2015 poden admetre velocitats de bits fins a 1000 kbps .

Per alguna raó, totes les piles Bluetooth provades actualment (Linux (PulseAudio), Android, Blackberry i macOS) tenen restriccions artificials del paràmetre màxim de pool de bits, que afecta directament la velocitat de bits màxima. Però aquest no és el problema més gran, gairebé tots els auriculars també limiten el valor màxim del bitpool a 53.

La majoria de dispositius funcionen bé en una pila Bluetooth modificada amb una velocitat de bits de 507 kbps, sense interrupcions ni cruixits. Però aquesta taxa de bits mai no es negociarà en condicions normals, amb piles Bluetooth existents.

*** Obligatori per fer proves amb les guies següents: bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso.torrent

Com provar en un PC

La prova de compatibilitat dels auriculars SBC d’alta taxa de bits és la més senzilla de realitzar al PC amb un adaptador Bluetooth. He preparat la imatge d'Ubuntu amb una pila Bluetooth modificada, que es pot executar com en una màquina virtual (connectant l'adaptador Bluetooth com a dispositiu USB a la màquina virtual, també funciona amb els adaptadors integrats als ordinadors portàtils) o arrencant des de la unitat flash USB. Aquesta imatge utilitza el següent perfil: Dual Channel, 8 bandes, 16 blocs, Loudness, bitpool 2..41, 44,1 kHz, que proporciona una velocitat de bits de 485 kbps.

S’executa en una màquina virtual

  • Descarregueu Virtualbox i Virtualbox Extension Pack: https://www.virtualbox.org/wiki/Downloads;
  • Instal·leu Virtualbox, inicieu-lo;
  • Instal·leu el paquet d'extensions mitjançant Fitxer → Preferències → Extensions;
  • Creeu una nova màquina virtual: Linux, Ubuntu (64 bits), 1024 RAM. No creeu un disc dur.
  • Aneu a la configuració de la màquina virtual, a Emmagatzematge trieu Controlador: IDE, buit, premeu la icona del CD → Tria un fitxer de disc òptic virtual;
  • Seleccioneu bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso descarregat;
  • Desa i tanca la finestra de configuració, inicia la màquina virtual;
  • Feu clic amb el botó dret a la icona del cable USB a la part inferior dreta, seleccioneu l'adaptador Bluetooth;

S’executa en un PC

La imatge admet l’arrencada de BIOS / CSM i UEFI.

  • Graveu la imatge en una unitat flash USB mitjançant Etcher: https://etcher.io/. Aquesta operació suprimirà tots els fitxers existents en una unitat USB.
  • Apagueu el PC;
  • Introduïu la unitat flash USB, engegueu el PC i premeu el botó d'ordre d'arrencada (normalment Esc o F12);
  • Seleccioneu la vostra unitat flash USB.

Realització de la prova

  • (opcional però recomanable) Feu doble clic a l'script 'Btsnoop Dump' a l'escriptori. S'iniciarà la captura de dades Bluetooth per a una anàlisi posterior. No tanqueu la finestra del terminal.
  • Canvieu els auriculars al mode de sincronització;
  • Feu clic a la fletxa que hi ha a l'extrem superior dret, seleccioneu Icona Bluetooth → Configuració Bluetooth;
  • Trieu els auriculars, espereu fins que es completi l’aparellament i tanqueu la finestra;
  • Estableix el volum d’Ubuntu a uns 2/3. També reduïu el volum mitjançant els botons dels auriculars, ja que pot ser molt fort després de l’aparellament.
  • Obriu la carpeta 'música', toqueu 'testrecord1.flac';
  • (opcional però recomanable) Tanca el reproductor, tanca la finestra del terminal. D’aquesta manera s’aturarà la captura de dades.
  • (opcional però recomanable) Obriu el navegador Firefox, carregueu el buidatge de dades (btsnoop_hci.btsnoop a l'escriptori) a https://btcodecs.valdikss.org.ru/

Podeu escoltar altra música a la carpeta de música o penjar la vostra;

No hauria d’haver cap cruixit, interrupció de l’àudio ni cap altra distorsió del so als auriculars. Si sentiu un bon so d'alta qualitat, això significa que els vostres auriculars admeten àudio amb una velocitat de bits de 485 kbps.

Com provar en un dispositiu Android

Per provar des d'un telèfon intel·ligent o tauleta Android, heu d'utilitzar una pila Bluetooth modificada, que requereix privilegis d'arrel.

Com es capta el buidatge de dades Bluetooth a Android

  1. Desactiveu el Bluetooth;
  2. A Configuració del desenvolupador, activeu el commutador 'Activa el registre d'exploració Bluetooth HCI';
  3. Activeu Bluetooth, connecteu-vos als auriculars mitjançant el menú Bluetooth (això és important! No permeteu la connexió automàtica!);
  4. Reprodueix una mostra d’àudio breu;
  5. Obriu la configuració del desenvolupador, desactiveu el commutador 'Activa el registre d'exploració Bluetooth HCI';
  6. S'hauria de crear /storage/emulated/0/btsnoop_hci.log o /data/misc/bluetooth/logs/btsnoop_hci.log. Si falta, obriu /etc/bluetooth/bt_stack.conf amb un editor de text i consulteu el camí a l’opció BtSnoopFileName.

No hauria d’haver cap cruixit, interrupció de l’àudio ni cap altra distorsió del so als auriculars. Si sentiu un bon so d’alta qualitat amb la biblioteca de pedaços, això significa que els vostres auriculars admeten àudio amb una velocitat de bits de 512 kbps.

Seguiu acuradament l'algorisme anterior. Especialment, si apagueu els auriculars o us desconnecteu després de l’aparellament, és important connectar-vos als auriculars manualment des de la configuració de Bluetooth. No permeteu la connexió automàtica.

Dispositius que admeten SBC com a mínim a 512 kbit / s

  • 1MÉS iBFree
  • JBL Everest 310
  • JBL Everest 700
  • Skullcandy HESH 3
  • Sony WI-C400
  • Sony MDR-1ABT
  • Sony MDR-ZX770BT
  • Sony MDR-XB650BT
  • Sony MDR-XB950B1
  • Sony SBH50
  • Bluedio T4s (Bitpool màxim 39. Respon si no és compatible amb doble canal, però funciona si és forçat, 462 kbit / s. No s'ajusta a l'especificació A2DP).
  • Bluedio T5 (Respon si no és compatible amb doble canal, però funciona si és forçat. No s'ajusta a l'especificació A2DP).
  • Bluedio T6 (Respon si no és compatible amb doble canal, però funciona si és forçat. No s'ajusta a l'especificació A2DP. Adopta el xip Max 97220).
  • Marshall Major II Bluetooth
  • Overdrive RealForce D1
  • Edificador W830BT
  • DEXP BT-250
  • Adaptador Logitech BT
  • Unitat principal d'automoció Noname (xip CSR8645)
  • Unitat principal de l'automòbil Sony DSX-A400BT

Dispositius que admeten SBC superior a 512 kbit / s

  • JBL Everest 310 (617-660 kbit / s)
  • Sony WI-C400 (576 kbit / s)
  • Sony MDR-ZX770BT (617-660 kbit / s)
  • Bluetooth Marshall Major II (617-660 kbit / s)
  • Overdrive RealForce D1 (730 kbit / s, doble canal, 4 subbandes)

Dispositius que no funcionen amb velocitats de bits més elevades ni amb doble canal

  1. Harper HB-202 (cruixits; xip Beken BK3256)
  2. Sony Ericsson MW600 (distorsió d'alta freqüència, cruixits; dispositiu del 2009)

Per què això és important: SBC 328k i 485k vs aptX

Contràriament a la creença popular de la qualitat de so aptX, en alguns casos pot produir una qualitat d'àudio pitjor que SBC amb una velocitat de bits estàndard de 328k.

SBC assigna dinàmicament bits de quantització per a bandes de freqüència, actuant sobre una base “de baix a dalt”. Si s’utilitzava tota la taxa de bits per a les freqüències inferiors i mitjanes, les freqüències superiors es “tallen” (es silencien).

aptX quantifica bandes de freqüència amb el mateix nombre de bits constantment, cosa que el converteix en un còdec de velocitat de bits constant: 352 kbps per a 44,1 kHz, 384 kbps per a 48 kHz. No pot 'transferir bits' a les freqüències que majoritàriament es necessiten. A diferència de SBC, aptX no 'retallarà' les freqüències, sinó que els afegirà sorolls de quantificació, reduint el rang dinàmic de l'àudio i, de vegades, introduint cruixits. SBC, al contrari, 'menja els detalls': descarta les zones més tranquil·les.

De mitjana, en comparació amb SBC 328k, aptX fa menys distorsió en la música amb un ampli rang de freqüències, però en la música amb un rang de freqüència estret i un ampli rang dinàmic de vegades guanya SBC 328k.

Considerem un cas especial, una gravació de piano. Aquí teniu un espectrograma:


La major quantitat d’energia radica en les freqüències de 0-4 kHz i dura fins a 10 kHz.
L'espectrograma del fitxer aptX té el següent aspecte:

Aquí teniu SBC 328k:

Es pot veure que el SBC 328k periòdicament va tallar completament l'interval superior a 16 kHz i va utilitzar totes les velocitats de bits disponibles per a intervals inferiors a aquest valor. Tanmateix, aptX va introduir més distorsions a l'espectre de freqüències audibles per l'oïda humana, que es poden veure a l'espectrograma original restada de l'espectrograma aptX (com més brillant, més distorsió):


Tot i que el SBC 328k ha introduït menys distorsions, el senyal va de 0 a 10 kHz i la resta s’ha tallat:

La taxa de bits 485k per a SBC va ser suficient per desar tot el rang de freqüències, sense tallar les bandes.

SBC 485k en aquesta mostra d’àudio és molt millor que aptX en el rang de 0-15 kHz i amb una diferència més petita, però encara notable, entre 15 i 22 kHz (com més fosca, menys distorsió):

Si canvieu a un SBC d’alta velocitat de bits, obtindreu un so superior a l’aptX la major part del temps, en qualsevol auricular.

  • original_and_aptx.zip
  • sbc.zip

Com es poden modificar les piles Bluetooth a Android 5-7

Aquestes modificacions s’han d’aplicar a les piles bluetooth Android Bluedroid (Android 5) i Fluor (Android 6-7). La pila modificada per Qualcomm no és compatible.

Substituïu Joint Stereo per doble canal en configuració SBC estàndard

android / platform / external / bluetooth / bluedroid / btif / co / bta_av_co.c: 99

Codi:

const tA2D_SBC_CIE btif_av_sbc_default_config = {BTIF_AV_SBC_DEFAULT_SAMP_FREQ, / * samp_freq * / A2D_SBC_IE_CH_MD_JOINT, / * ch_mode * / A2D_SBC_IE_BLOCKS_16, / * block_len * / A2D_SBC_IE_SUBBAND_8, / * num_subbands * / A2D_SBC_IE_ALLOC_MD_L, / * alloc_mthd * / BTA_AV_CO_SBC_MAX_BITPOOL, / * max_bitpool * / A2D_SBC_IE_MIN_BITPOOL / * min_bitpool * /};

Substitueix A2D_SBC_IE_CH_MD_JOINT per A2D_SBC_IE_CH_MD_DUAL.

Augmenteu la prioritat de doble canal

android / platform / external / bluetooth / bluedroid / btif / co / bta_av_co.c: 41

Codi:

if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; altrament si (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; altrament si (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; Mou si amb A2D_SBC_IE_CH_MD_DUAL a la part superior.
  1. Desactiva o augmenta la restricció de la taxa de bits

La pila bluetooth d'Android no només té un límit de bit bits, sinó també un límit de velocitat de bits de 328 kbit / s. Si els auriculars admeten, per exemple, el bitpool 53 per a 48 kHz, Android reduirà el pool de bits fins a ajustar-lo al límit de 328 kbit / s. Això passarà DESPRÉS de la negociació del còdec, a l’etapa de codificació, no es té en compte el valor del bitpool al paquet Bluetooth SetCapabilities.

android / platform / external / bluetooth / bluedroid / btif / src / btif_media_task.c: 172

Codi:

#define DEFAULT_SBC_BITRATE 328

Substitueix per 512.

  1. (només per a experiments) Desactiva el límit MTU.

Això és necessari per a velocitats de bits superiors a ~ 580 kbit / s.

btif / src / btif_media_task.c: 174

Codi:

/ * 2DH5 mida de càrrega útil de 679 bytes - (4 bytes L2CAP Header + 12 bytes AVDTP Header) * / #define MAX_2MBPS_AVDTP_MTU 663

Com es poden modificar les piles Bluetooth a Android 8-9

Aquestes modificacions no s’han provat, però haurien de funcionar.

Afegiu suport de doble canal a la font SBC A2DP

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:55

Codi:

/ * Capacitats del còdec SBC SRC * / const const tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_BLOCKS_8;

afegiu A2DP_SBC_IE_CH_MD_DUAL a ch_mode.

Substituïu Joint Stereo per Dual Channel en la configuració predeterminada

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:82

Codi:

/ * Per defecte SBC còdec configuració * / const tA2DP_SBC_CIE a2dp_sbc_default_config = {A2DP_SBC_IE_SAMP_FREQ_44, / * samp_freq * / A2DP_SBC_IE_CH_MD_JOINT, / * ch_mode * / A2DP_SBC_IE_BLOCKS_16, / * block_len * / A2DP_SBC_IE_SUBBAND_8, / * num_subbands * / A2DP_SBC_IE_ALLOC_MD_L, / * alloc_method * / A2DP_SBC_IE_MIN_BITPOOL, / * min_bitpool * / A2DP_SBC_MAX_BITPOOL, / * max_bitpool * / BTAV_A2DP_CODEC_BITS_PER_SAMPLE_16 / * bits_per_sample * /};

Substitueix A2DP_SBC_IE_CH_MD_JOINT per A2DP_SBC_IE_CH_MD_DUAL.

Augmenteu la prioritat de doble canal

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:1155

Codi:

bool estàtic select_best_channel_mode mode (uint8_t ch_mode, tA2DP_SBC_CIE * p_result, btav_a2dp_codec_config_t * p_codec_config) {if (ch_mode & A2DP_SBC_IE_CH_MD_J_INT_PD_JOINT> {p_DD_JOINT> p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; tornar cert; } if (ch_mode & A2DP_SBC_IE_CH_MD_STEREO) {p_result-> ch_mode = A2DP_SBC_IE_CH_MD_STEREO; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; tornar cert; } if (ch_mode & A2DP_SBC_IE_CH_MD_DUAL) {p_result-> ch_mode = A2DP_SBC_IE_CH_MD_DUAL; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; tornar cert; } if (ch_mode & A2DP_SBC_IE_CH_MD_MONO) {p_result-> ch_mode = A2DP_SBC_IE_CH_MD_MONO; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_MONO; tornar cert; } tornar fals; }

Mou si amb A2DP_SBC_IE_CH_MD_DUAL a la part superior.

Augmenta el límit de velocitat de bits

/platform/system/bt/stack/a2dp/a2dp_sbc_encoder.cc:42

Codi:

#define A2DP_SBC_DEFAULT_BITRATE 328

Substitueix per 512.

  1. (només per a experiments) Desactiva el límit MTU

Això és necessari per a velocitats de bits superiors a ~ 580 kbit / s.

/platform/system/bt/stack/a2dp/a2dp_sbc_encoder.cc:47

Codi:

#define MAX_2MBPS_AVDTP_MTU 663

Piles Bluetooth pegades (flashable)

  • Li màxima de 2 per Oreo Patched.zip
  • LeEco Cool Changer S1 EUI_5.8.19S.zip
  • Leeco LE2 (EUI 5.9.26s, Android 6) .zip
  • Xiaomi meu Note (MIUI 9 Miui.su usnkreal v8.4.12, Android 6.0.1) .zip
  • Xiaomi meu noti 3 (MIUI 9, Android 7) .zip
  • Xiaomi Mi4c (Android 7.0 NRD90M, MIUI-9.5 9.5.1.0 (NXKCNFA)). Zip
  • Xiaomi MI5s (MIUI Global 9.6.1.0, Android 7) .zip
  • Xiaomi Redmi 3s (android 6.01, mmb29m, miui global 9.6.1.0) .zip
  • Xiaomi Redmi 4 (MiuiPro 10 8.8.2, Android 6.0.1, MMB29M) .zip
  • Xiaomi Redmi 4 Prime.zip
  • Xiaomi Redmi 4 pro (MIUI 9, miuipro 8.4.26) .zip
  • Xiaomi Redmi Note 3 (Resurrection Remix Android 7.1.2_r36) .zip
  • Redmi Note 4x (Masik Premium, android 7.0) .zip
  • Asus Zoom (Android 5, 2.26.40.108_20160520) .zip
  • Li màxima de 2 per Oreo Patched.zip
  • Huawei P9 (Android 7) .zip
  • Samsung Galaxy S4 LTE GT-I9505 (Android 7.1.2; LineageOS 14.1-20180615-NIGHTLY-jfltexx) .zip
  • cremallera
  • Li màxima de 2 per Oreo Patched.zip
10 minuts de lectura