Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

Voordat u hierdie artikel lees, word dit aanbeveel dat u die vorige artikel lees: Oudio via Bluetooth: soveel detail as moontlik oor profiele, kodeks en toestelle

Sommige gebruikers van draadlose oorfone rapporteer swak klankgehalte en gebrek aan hoë frekwensies wanneer die standaard Bluetooth SBC-kodek gebruik word, wat deur alle oudiotoestelle ondersteun word. ’n Algemene aanbeveling om klank te verbeter, is om toestelle en oorfone te koop wat aptX- en LDAC-kodeks ondersteun. Hierdie kodeks vereis tantieme, so toestelle wat dit ondersteun, is duurder.

Dit blyk dat die lae kwaliteit van die SBC te wyte is aan kunsmatige beperkings van Bluetooth-stapels en koptelefooninstellings, en hierdie beperking kan op enige bestaande toestelle omseil word deur sagtewareveranderings aan die slimfoon of rekenaar.

SBC-kodek

Die SBC-kodek het baie verskillende parameters wat tydens die verbindingsopstelfase onderhandel word. Tussen hulle:

  • Aantal en tipe kanale: Joint Stereo, Stereo, Dual Channel, Mono;
  • Aantal frekwensiebande: 4 of 8;
  • Aantal blokkies in 'n pakkie: 4, 8, 12, 16;
  • Kwantiseringsbistoewysingsalgoritme: Hardheid, SNR;
  • Die maksimum en minimum waarde van die poel bisse wat in kwantisering (bitpool) gebruik word: gewoonlik van 2 tot 53.

Die dekodeerder moet enige kombinasie van hierdie parameters ondersteun. Die enkodeerder implementeer dalk nie alles nie.
Bestaande Bluetooth-stapels stem gewoonlik ooreen met die volgende profiel: Gesamentlike stereo, 8 bande, 16 blokke, Loudness, bitpool 2..53. Hierdie profiel kodeer 44.1 kHz oudio teen 'n bitsnelheid van 328 kbps.
Die bitpool-parameter beïnvloed direk die bitsnelheid binne een profiel: hoe hoër dit is, hoe hoër is die bitsnelheid, en dus die kwaliteit.
Die bitpool-instelling is egter nie gekoppel aan 'n spesifieke profiel nie; ander parameters beïnvloed ook die bitsnelheid aansienlik: die tipe kanale, die aantal frekwensiebande, die aantal blokke. Jy kan die bitrate indirek verhoog, deur nie-standaard profiele te onderhandel, sonder om die bitpool te verander.

Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

SBC Bitrate Formule

Byvoorbeeld, die Dual Channel-modus kodeer die kanale afsonderlik deur die hele bitpool vir elke kanaal te gebruik. Deur die toestel te dwing om Dual Channel in plaas van Joint Stereo te gebruik, kry ons byna dubbel die bitsnelheid met dieselfde maksimum bitpool waarde van 617 kbps.
Na my mening is die gebruik van 'n nie-profiel bitpool waarde in die onderhandeling stadium 'n fout in die A2DP standaard, wat gelei het tot 'n kunsmatige beperking in die kwaliteit van SBC. Dit sal wyser wees om bitrate te onderhandel, nie bitpool nie.

Hierdie vaste Bitpool- en Bitrate-waardes kom uit 'n tabel van aanbevole waardes vir hoë kwaliteit klank. Maar 'n aanbeveling is nie 'n rede om jouself tot hierdie waardes te beperk nie.

Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

Die A2DP v1.2-spesifikasie, wat van 2007 tot 2015 aktief was, vereis dat alle dekodeerders korrek werk met bistempo's tot 512 kbps:

Die dekodeerder van die SNK sal alle moontlike bitpoolwaardes ondersteun wat nie die maksimum bistempo oorskry nie. Hierdie profiel beperk die beskikbare maksimum bistempo tot 320kb/s vir mono, en 512kb/s vir tweekanaalmodusse.

Daar is geen bitsnelheidsbeperking in die nuwe weergawe van die spesifikasie nie. Daar word aanvaar dat moderne oorfone wat na 2015 vrygestel is en wat EDR ondersteun, bistempo's tot ≈730 kbps kan ondersteun.

Om een ​​of ander rede het die Linux (PulseAudio), Android, Blackberry en macOS Bluetooth-stapels wat ek getoets het, kunsmatige beperkings op die maksimum waarde van die bitpool-parameter, wat die maksimum bitsnelheid direk beïnvloed. Maar dit is nie die grootste probleem nie, byna alle oorfone beperk ook die maksimum bitpoolwaarde tot 53.
Soos ek reeds gesien het, werk die meeste toestelle perfek op 'n aangepaste Bluetooth-stapel met 'n bitsnelheid van 551 kbps, sonder onderbrekings of krake. Maar so 'n bitsnelheid sal nooit konsekwent wees onder normale omstandighede, op gewone Bluetooth-stapels nie.

Wysig die Bluetooth-stapel

In enige Bluetooth-stapel wat versoenbaar is met die A2DP-standaard, is daar ondersteuning vir Dual Channel-modus, maar dit is nie moontlik om dit vanaf die koppelvlak te aktiveer nie.

Kom ons voeg 'n skakelaar by die koppelvlak! Ek het pleisters vir Android 8.1 en Android 9 gemaak wat volledige Dual Channel-ondersteuning by die stapel voeg, 'n modus by die modusskakel-kieslys in ontwikkelaarnutsgoed voeg, en Dual Channel-geaktiveerde SBC's behandel asof hulle 'n bykomende kodek soos aptX, AAC is of LDAC (Android noem dit HD Audio) deur 'n regmerkie by die toestel se Bluetooth-instellings te voeg. Hier is hoe dit lyk:

Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

Patch vir Android 9
Patch vir Android 8.1

Wanneer die merkblokkie geaktiveer is, begin Bluetooth-oudio met 'n bistempo versend word 551 kbps, as die oorfone 'n 3 Mbps-verbinding ondersteun, of 452 kbpsas die oorfone slegs 2 Mbps ondersteun.

Hierdie pleister is ingesluit in die volgende alternatiewe firmware:

  • LineageOS
  • Opstanding Remix
  • crDroid

Waar kom 551 en 452 kbps vandaan?

Die lugverdeeltegnologie in Bluetooth is ontwerp om groot, vaste grootte pakkies doeltreffend oor te dra. Data-oordrag vind plaas in gleuwe, die grootste aantal gleuwe wat in een oordrag gestuur word, is 5. Daar is ook oordragmodusse wat 1 of 3 gleuwe gebruik, maar nie 2 of 4 nie. Tot 5 grepe kan in 679 gleuwe teen 'n verbindingspoed oorgedra word van 2 Mbps en tot 1021 grepe teen 'n spoed van 3 Mbps, en in onderskeidelik 3 - 367 en 552 grepe.

Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

As ons minder data as 679 of 1021 grepe wil oordra, maar meer as 367 of 552 grepe, sal die oordrag steeds 5 gleuwe neem, en die data sal in dieselfde tyd oorgedra word, wat die oordragdoeltreffendheid verminder.

Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

SBC in Dual Channel-modus, by 44100 Hz klank met Bitpool 38 parameters, 16 blokke per raam, 8 frekwensiebande, kodeer oudio in 164 grepe rame, met 'n bitsnelheid van 452 kbps.
Oudio moet in die L2CAP- en AVDTP-oordragprotokolle ingekapsuleer word, wat 16 grepe van die oudio-loonvrag neem.

Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

Dus, in een Bluetooth-oordrag met 5 gleuwe, is dit moontlik om 4 klankrame te pas:

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

Ons pas 11.7 ms se oudiodata in 'n stuurpakkie wat in 3.75 ms versend sal word, en ons het 6 ongebruikte grepe in die pakket oor.
As jy die bitpool effens lig, kan 4 klankrame nie meer in een pakkie verpak word nie. Jy moet 3 rame op 'n slag stuur, wat oordragdoeltreffendheid verminder, die hoeveelheid oudio wat per raam versend word verminder, en sal lei tot klank wat vinniger hakkel onder swak radiotoestande.

Op dieselfde manier is 'n bitsnelheid van 551 kbps gekies vir EDR 3 Mbps: met Bitpool 47, 16 blokke per raam, 8 frekwensiebande, word 'n raamgrootte van 200 grepe verkry, met 'n bitsnelheid van 551 kbps. Een pakket bevat 5 rame of 14.6 ms musiek.

Die algoritme vir die berekening van alle SBC-parameters is redelik ingewikkeld, jy kan maklik deurmekaar raak as jy met die hand tel, so ek het 'n interaktiewe sakrekenaar gemaak om diegene wat belangstel te help: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Hoekom is dit alles nodig?

In teenstelling met die algemene opvatting oor die klankgehalte van die aptX-kodek, kan dit op sommige lêers slegter resultate gee as SBC met 'n standaard bitsnelheid van 328 kbps.

Die SBC ken kwantiseringsbisse dinamies toe aan die frekwensiebande op 'n onder-na-bo-wyse. As die hele bitsnelheid vir die onderste en middelste frekwensies gebruik is, sal die boonste frekwensies "afgesny" word (daar sal eerder stilte wees).
aptX kwantiseer frekwensiebande met dieselfde aantal bisse heeltyd, en daarom het dit 'n konstante bistempo: 352 kbps vir 44.1 kHz, 384 kbps vir 48 kHz, en dit kan nie bisse "oordra" na daardie frekwensies wat dit nodig het nie. meeste. Anders as SBC, sal aptX nie frekwensies "sny" nie, maar sal kwantiseringsgeraas daarby voeg, die dinamiese omvang van die oudio verminder, en soms kenmerkende krakers bekendstel. SBC, aan die ander kant, "eet besonderhede" - gooi die stilste areas weg.
Gemiddeld, in vergelyking met die SBC 328k, stel aptX minder vervorming op wye reeks musiek bekend, maar op smalreeks, hoëdinamiese reeks musiek wen die SBC 328k soms.

Kom ons kyk na 'n spesiale geval. Spektrogram van klavieropname:
Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

Die hoofenergie lê in frekwensies van 0 tot 4 kHz, en gaan voort tot 10 kHz.
Die spektrogram van 'n lêer saamgepers met aptX lyk soos volg:
Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

En dit is hoe die SBC 328k lyk.
Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

Dit kan gesien word dat die SBC 328k die reeks bo 16 kHz periodiek heeltemal afgeskakel het, en al die beskikbare bitrate spandeer het op reekse onder hierdie waarde. aptX het egter meer vervorming in die frekwensiespektrum ingebring wat vir die menslike oor hoorbaar is, wat gesien kan word in die afgetrekte oorspronklike spektrogram van die aptX-spektrogram (hoe helderder, hoe meer vervorming):
Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

Terwyl die SBC 328k die sein minder bederf het in die reeks van 0 tot 10 kHz, en die res afgesny het:
Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

Die bitrate van 485k SBC was genoeg om die hele frekwensiereeks te red, sonder om die bande af te sny.
Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

SBC 485k op hierdie komposisie is ver voor aptX in die reeks van 0-15 kHz, en met 'n kleiner, maar steeds merkbare verskil - in 15-22 kHz (hoe donkerder, hoe minder vervorming):
Verander die Bluetooth-stapel om die klank op koptelefoon sonder AAC, aptX en LDAC codecs te verbeter

Argief van oorspronklike klank, SBC en aptX.

Deur oor te skakel na 'n hoë-bitsnelheid SBC, sal jy klank kry wat dikwels beter as aptX op enige koptelefoon presteer. Op oorfone wat 'n 3 Mbps EDR-verbinding ondersteun, lewer 551 kbps klank wat vergelykbaar is met aptX HD.

En dalk selfs meer?

Die Android-pleister het ook 'n opsie om die bitsnelheid vir 2Mbps EDR-toestelle verder te verhoog. Dit is moontlik om die bistempo van 452 kbps tot 595 kbps te verhoog, ten koste van verminderde transmissiestabiliteit in moeilike radiotoestande.
Dit is genoeg om die veranderlike persist.bluetooth.sbc_hd_higher_bitrate op 1 te stel:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Die pleister vir uiterste bitsnelheid word slegs in LineageOS 15.1 aanvaar, maar nie in 16.0 nie.

Toestelversoenbaarheid

SBC Dual Channel word ondersteun deur byna alle oorfone, luidsprekers en motorhoofeenhede. Dit is nie verbasend nie - die standaard skryf sy ondersteuning in enige dekoderingstoestelle voor. Daar is 'n klein aantal toestelle waarop hierdie modus probleme veroorsaak, maar dit is enkele gevalle.
Vir meer inligting oor versoenbare toestelle, sien W4bsitXNUMX-dns.com of XDA-ontwikkelaars.

Vergelyking van klankverskille

Ek het 'n webdiens gemaak wat oudio in SBC (sowel as aptX en aptX HD) intyds enkodeer, direk in die blaaier. Daarmee kan jy die klank van verskillende SBC-profiele en ander codecs vergelyk, sonder om werklik klank via Bluetooth oor te dra, op enige bedrade oorfone, luidsprekers en jou gunstelingmusiek, asook enkoderingsparameters direk tydens oudio-terugspeel verander.
btcodecs.valdikss.org.ru/sbc-encoder

Kontak Android-ontwikkelaars

Ek het aan baie Bluetooth-stapelontwikkelaars by Google geskryf en hulle gevra om dit te oorweeg om pleisters in die Android-hooftak - AOSP in te sluit, maar het nie 'n enkele antwoord ontvang nie. My plakkies is in Gerrit pleister stelsel vir Android het ook sonder kommentaar van enigiemand betrokke gebly.
Ek sal bly wees as ek gehelp kan word in verband met die ontwikkelaars van Google en die implementering van die SBC HD in Android. Die pleister in gerrit is verouderd (dit is een van die vroeë hersienings), en ek sal dit opdateer as die ontwikkelaars in my veranderinge belangstel (dit is nie vir my maklik om dit op te dateer nie, ek het nie toestelle wat met Android versoenbaar is nie V).

Gevolgtrekking

Gebruikers van slimfone met LineageOS, Resurrection Remix en crDroid-firmware kan verbeterde klankgehalte op die oomblik geniet, aktiveer net die opsie in die Bluetooth-toestelinstellings. Linux-gebruikers kan ook 'n verhoogde SBC-bitsnelheid kry deur te installeer pleister van Pali Rohar, wat onder meer ondersteuning vir die aptX-, aptX HD- en FastStream-kodeks byvoeg.

Bron: will.com

Voeg 'n opmerking