Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

Prima di leghje stu articulu, hè cunsigliatu di leghje l'articulu precedente: Audio via Bluetooth: u più dettagliu pussibule nantu à i profili, i codecs è i dispositi

Certi utilizatori di cuffie wireless signalanu una qualità di sonu pobra è a mancanza di frequenze alte quandu utilizanu u codec standard Bluetooth SBC, chì hè supportatu da tutti i dispositi audio. Una ricunniscenza cumuni per migliurà u sonu hè di cumprà apparecchi è cuffie chì supportanu i codecs aptX è LDAC. Questi codecs necessitanu royalties, cusì i dispositi chì li supportanu sò più caru.

Risulta chì a bassa qualità di l'SBC hè dovuta à limitazioni artificiali di stacks Bluetooth è paràmetri di cuffie, è sta limitazione pò esse aggirata nantu à qualsiasi dispositi esistenti da i cambiamenti di software à u smartphone o l'urdinatore.

Codec SBC

U codec SBC hà parechji paràmetri diffirenti chì sò negoziati durante a fase di installazione di cunnessione. À mezu à elli:

  • Numero è tipu di canali: Stereo cumuni, Stereo, Dual Channel, Mono;
  • Numero di bande di freccia: 4 o 8;
  • Numero di blocchi in un pacchettu: 4, 8, 12, 16;
  • Algoritmu di allocazione di bit di quantizazione: Loudness, SNR;
  • U valore massimu è minimu di u pool di bits utilizati in quantization (bitpool): di solitu, da 2 à 53.

U decodificatore deve sustene ogni cumminazione di queste opzioni. L'encoder ùn pò micca implementà tuttu.
Stacks Bluetooth esistenti sò generalmente d'accordu nantu à u prufilu seguente: Stereo cumuni, 8 bande, 16 blocchi, Loudness, bitpool 2..53. Stu prufilu codifica l'audio di 44.1 kHz à una velocità di bit di 328 kbps.
U paràmetru di bitpool influenza direttamente u bitrate in un prufilu: più altu hè, più altu hè u bitrate, è dunque a qualità.
Tuttavia, u paràmetru di bitpool ùn hè micca ligatu à un prufilu specificu; altri paràmetri affettanu ancu significativamente u bitrate: u tipu di canali, u numeru di bande di freccia, u numeru di blocchi. Pudete elevà u bitrate indirettu, negoziendu profili non standard, senza cambià u bitpool.

Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

Formula SBC Bitrate

Per esempiu, u modu Dual Channel codifica i canali separatamente, utilizendu tuttu u bitpool per ogni canale. Forzendu u dispusitivu à utilizà Dual Channel invece di Joint Stereo, avemu quasi u doppiu di u bitrate cù u listessu valore massimu di bitpool di 617 kbps.
In my opinion, l'usu di un valore di bitpool non-profile in u stadiu di negoziazione hè un difettu in u standard A2DP, chì hà purtatu à una limitazione artificiale in a qualità di SBC. Saria più sàviu di negozià bitrate, micca bitpool.

Questi valori Bitpool è Bitrate fissi sò urigginati da una tabella di valori cunsigliati per l'audio di alta qualità. Ma una ricunniscenza ùn hè micca un mutivu per limità à sti valori.

Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

A specificazione A2DP v1.2, chì era attiva da u 2007 à u 2015, richiede chì tutti i decodificatori funzionanu currettamente cù bit rates finu à 512 kbps:

U decodificatore di u SNK supporta tutti i valori di bitpool pussibuli chì ùn risultanu micca in più di a velocità massima di bit. Stu prufilu limita u bit rate massimu dispunibile à 320 kb/s per mono, è 512 kb/s per i modi di dui canali.

Ùn ci hè micca un limitu di bitrate in a nova versione di a specificazione. Si assume chì i cuffie muderni liberati dopu à 2015 è chì supportanu EDR ponu supportà bit rates finu à ≈730 kbps.

Per una certa ragione, i stacks di Linux (PulseAudio), Android, Blackberry è macOS Bluetooth chì aghju pruvatu anu limiti artificiali nantu à u valore massimu di u paràmetru di bitpool, chì affetta direttamente u bitrate massimu. Ma questu ùn hè micca u prublema più grande, quasi tutti i cuffie limitanu ancu u valore massimu di bitpool à 53.
Comu aghju vistu, a maiò parte di i dispositi funzionanu bè nantu à una pila Bluetooth mudificata cù una freccia di 551 kbps, senza interruzioni è coddu. Ma un tali bitrate ùn serà mai negoziatu in cundizioni normali, nantu à stacks Bluetooth ordinali.

Mudificà a pila Bluetooth

In ogni stack Bluetooth chì hè cumpatibile cù u standard A2DP, ci hè supportu per u modalità Dual Channel, ma ùn hè micca pussibule di attivà da l'interfaccia.

Aghjunghjemu un cambiamentu à l'interfaccia! Aghju fattu patch per Android 8.1 è Android 9 chì aghjunghjenu un supportu pienu di Dual Channel à a pila, aghjunghjenu un modu à u menù di cambiamentu di modu in l'arnesi di sviluppatore, è trattanu SBC abilitati Dual Channel cum'è s'ellu era un codec supplementu cum'è aptX, AAC. , o LDAC (Android u chjama HD Audio) aghjunghjendu un segnu di spunta à i paràmetri Bluetooth di u dispusitivu. Eccu ciò chì pare:

Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

Patch per Android 9
Patch per Android 8.1

Quandu a casella di spunta hè attivata, l'audio Bluetooth cumencia à esse trasmessu cù una velocità di bit 551 kbps, se l'auriculare supportanu una cunnessione di 3 Mbps, o 452 kbpsse l'auriculare sustene solu 2 Mbps.

Stu patch hè inclusu in u firmware alternativu seguente:

  • LineageOS
  • Resurrection Remix
  • crDroid

Da induve venenu 551 è 452 kbps ?

A tecnulugia di divisione di l'aria in Bluetooth hè pensata per trasmette in modu efficiente pacchetti di grandezza fissa. A trasferimentu di dati si trova in slots, u più grande numaru di slots mandati in un trasferimentu hè 5. Ci sò ancu modi di trasferimentu chì utilizanu 1 o 3 slots, ma micca 2 o 4. Finu à 5 bytes ponu esse trasferiti in 679 slots à una velocità di cunnessione. di 2 Mbps è finu à 1021 byte à una velocità di 3 Mbps, è in 3 - 367 è 552 byte, rispettivamente.

Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

Se vulemu trasfiriri menu di dati di 679 o 1021 bytes, ma più di 367 o 552 bytes, allura u trasferimentu hà da piglià sempre 5 slots, è i dati seranu trasferiti in u stessu tempu, chì riduce l'efficienza di trasferimentu.

Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

SBC in modalità Dual Channel, à 44100 Hz audio cù parametri Bitpool 38, 16 blocchi per frame, 8 bande di frequenza, codifica l'audio in frames di 164 byte, cù un bit rate di 452 kbps.
L'audio deve esse incapsulatu in i protokolli di trasferimentu L2CAP è AVDTP, chì piglianu 16 bytes da u payload audio.

Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

Cusì, in una trasmissione Bluetooth cù 5 slots, hè pussibule mette 4 frames audio:

679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (заголовок SBC) - (164*4) = 6

Fighjemu 11.7 ms di dati audio in un pacchettu di mandatu chì serà trasmessu in 3.75 ms, è avemu 6 bytes inutilizati lasciati in u pacchettu.
Se alzate ligeramente u bitpool, 4 frames audio ùn ponu più esse imballati in un pacchettu. Avete da mandà 3 frames à u tempu, chì riduce l'efficienza di trasmissione, riduce a quantità di l'audio trasmessa per frame, è portarà à l'audio stuttering più veloce in condizioni di radiu poveri.

In u listessu modu, un bitrate di 551 kbps hè statu sceltu per EDR 3 Mbps: cù Bitpool 47, 16 blocchi per frame, 8 bande di freccia, una dimensione di frame di 200 bytes hè ottenuta, cù un bit rate di 551 kbps. Un pacchettu cuntene 5 frames o 14.6 ms di musica.

L'algoritmu per u calculu di tutti i paràmetri SBC hè abbastanza cumplicatu, pudete facilmente cunfundà se cuntate manualmente, cusì aghju fattu una calculatrice interattiva per aiutà quelli chì sò interessati: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Perchè tuttu questu hè necessariu?

Contrariamente à a credenza populari nantu à a qualità di u sonu di u codec aptX, nantu à certi schedari pò dà risultati peghju chè SBC cù un bitrate standard di 328 kbps.

L'SBC attribuisce dinamicamente bit di quantificazione à e bande di freccia in una moda da fondu à cima. Se u bitrate tutale hè stata utilizata per e frequenze più bassu è media, e frequenze superiori seranu "tagliate" (ci serà invece u silenziu).
aptX quantizza bande di freccia cù u listessu numeru di bit in tuttu u tempu, chì hè per quessa chì hà una velocità di bit constante: 352 kbps per 44.1 kHz, 384 kbps per 48 kHz, è ùn pò micca "traduci bit" à quelle frequenze chì ne necessitanu. più. A cuntrariu di SBC, aptX ùn "tagliarà" e frequenze, ma li aghjunghjera u rumore di quantizazione, riducendu a gamma dinamica di l'audio, è qualchì volta introducendu crackles caratteristici. SBC, invece, "eats details" - scarta i spazii più tranquilli.
In media, paragunatu à l'SBC 328k, l'aptX introduce menu distorsioni nantu à a musica larga, ma in a musica stretta è dinamica, l'SBC 328k qualchì volta vince.

Fighjemu un casu particulari. Spettrogramma di registrazione di pianoforte:
Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

L'energia principale si trova in frequenze da 0 à 4 kHz, è cuntinueghja finu à 10 kHz.
U spettrogramma di un schedariu cumpressatu cù aptX pare cusì:
Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

È questu hè ciò chì pare l'SBC 328k.
Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

Pò esse vistu chì l'SBC 328k periodicamente disattivava cumplettamente a gamma sopra 16 kHz, è spende tuttu u bitrate dispunibule nantu à intervalli sottu à stu valore. Tuttavia, aptX hà introduttu più distorsioni in u spettru di freccia audible à l'arechja umana, chì pò esse vistu in u spettrogramma originale sottrattu da u spettrogramma aptX (u più luminoso, più distorsione):
Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

Mentre chì l'SBC 328k hà spoiled u signale menu in a gamma da 0 à 10 kHz, è tagliatu u restu:
Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

U bitrate di 485k SBC era abbastanza per salvà tutta a gamma di freccia, senza taglià e bande.
Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

SBC 485k nantu à sta cumpusizioni hè assai prima di l'aptX in a gamma di 0-15 kHz, è cù una differenza più chjuca, ma sempre notevule - in 15-22 kHz (u più scuru, u menu distorsione):
Mudificà a pila Bluetooth per migliurà u sonu in cuffie senza codecs AAC, aptX è LDAC

Archivio di audio originale, SBC è aptX.

Passendu à un SBC high-bitrate, uttene un audio chì spessu supera aptX in ogni cuffie. In cuffie chì supportanu una cunnessione EDR 3 Mbps, 551 kbps produce un sonu paragunabile à aptX HD.

E forse ancu di più ?

U patch Android hà ancu una opzione per aumentà ancu u bitrate per i dispositi EDR 2Mbps. Hè pussibule aumentà a velocità di bit da 452 kbps à 595 kbps, à u costu di una stabilità di trasmissione ridutta in cundizioni difficiuli di radiu.
Hè abbastanza per stabilisce a variabile persist.bluetooth.sbc_hd_higher_bitrate à 1:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

U patch per u bitrate estremu hè accettatu solu in LineageOS 15.1, ma micca in 16.0.

Cumpatibilità di i dispositi

SBC Dual Channel hè supportatu da quasi tutte e cuffie, altoparlanti è unità di capu di vittura. Questu ùn hè micca surprisante - u standard prescrive u so supportu in qualsiasi dispositi di decodificazione. Ci hè un picculu numeru di i dispusitivi nant'à u quali stu modu causa prublemi, ma quessi sò casi unichi.
Per più infurmazione nantu à i dispositi compatibili, vede 4pda o xda-sviluppatori.

Comparazione di differenzi di sonu

Aghju fattu un serviziu web chì codifica l'audio in SBC (cum'è aptX è aptX HD) in tempu reale, ghjustu in u navigatore. Cù ellu, pudete paragunà u sonu di diversi profili SBC è altri codecs, senza trasmette l'audio per via Bluetooth, in qualsiasi cuffie cablate, parlanti, è a vostra musica preferita, è ancu cambià i paràmetri di codificazione ghjustu durante a riproduzione audio.
btcodecs.valdikss.org.ru/sbc-encoder

Cuntattate i Sviluppatori Android

Aghju scrittu à parechji sviluppatori di stack Bluetooth in Google, dumandenduli di cunsiderà l'inclusione di patches in u ramu principale di Android - AOSP, ma ùn anu micca ricevutu una sola risposta. I mo patch sò in Sistema di patching Gerrit per Android resta ancu senza cummentarii da nimu implicatu.
Saria cuntentu se puderia esse aiutatu in cunnessione cù i sviluppatori di Google è l'implementazione di u SBC HD in Android. U patch in gerrit hè fora di data (hè una di e prime rivisioni), è l'aghjurnà se i sviluppatori sò interessati à i mo cambiamenti (ùn hè micca faciule per mè aghjurnà, ùn aghju micca dispositi cumpatibili cù Android). Q).

cunchiusioni

L'utilizatori di smartphones cù u firmware LineageOS, Resurrection Remix è crDroid ponu gode di una qualità di sonu mejorata avà, basta à attivà l'opzione in i paràmetri di u dispositivu Bluetooth. L'utilizatori di Linux ponu ancu ottene un bitrate SBC aumentatu installendu patch da Pali Rohar, chì aghjunghje supportu per i codecs aptX, aptX HD è FastStream, frà altre cose.

Source: www.habr.com

Add a comment