Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

Preden preberete ta članek, priporočamo, da preberete prejšnji članek: Zvok prek Bluetooth: največ podrobnosti o profilih, kodekih in napravah

Nekateri uporabniki brezžičnih slušalk poročajo o slabi kakovosti zvoka in pomanjkanju visokih frekvenc pri uporabi standardnega kodeka SBC Bluetooth, ki ga podpirajo vse zvočne naprave. Običajno priporočilo za izboljšanje zvoka je nakup naprav in slušalk, ki podpirajo kodeke aptX in LDAC. Ti kodeki zahtevajo licenčnine, zato so naprave, ki jih podpirajo, dražje.

Izkazalo se je, da je nizka kakovost SBC posledica umetnih omejitev skladov Bluetooth in nastavitev slušalk, to omejitev pa je mogoče zaobiti na vseh obstoječih napravah s spremembami programske opreme pametnega telefona ali računalnika.

Kodek SBC

Kodek SBC ima veliko različnih parametrov, o katerih se pogaja med fazo nastavitve povezave. Med njimi:

  • Število in vrsta kanalov: skupni stereo, stereo, dvojni kanal, mono;
  • Število frekvenčnih pasov: 4 ali 8;
  • Število blokov v paketu: 4, 8, 12, 16;
  • Algoritem za porazdelitev bitov med kvantizacijo: glasnost, SNR;
  • Najvišja in najmanjša vrednost skupine bitov, uporabljenih med kvantizacijo (bitpool): običajno od 2 do 53.

Dekodirna naprava mora podpirati katero koli kombinacijo teh parametrov. Kodirnik morda ne izvaja vsega.
Obstoječi skladi Bluetooth se običajno strinjajo z naslednjim profilom: skupni stereo, 8 pasov, 16 blokov, glasnost, bitpool 2..53. Ta profil kodira zvok 44.1 kHz pri bitni hitrosti 328 kbps.
Parameter bitpool neposredno vpliva na bitno hitrost znotraj enega profila: višja kot je, višja je bitna hitrost in s tem kakovost.
Vendar pa parameter bitpool ni vezan na določen profil; Na bitno hitrost v veliki meri vplivajo tudi drugi parametri: vrsta kanalov, število frekvenčnih pasov, število blokov. Bitno hitrost lahko povečate posredno, tako da se dogovorite za nestandardne profile, ne da bi spremenili bitpool.

Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

Formula za izračun bitne hitrosti SBC

Dvojni kanalni način na primer kodira kanale ločeno z uporabo celotnega bitnega prostora za vsak kanal. Če napravo prisilimo k uporabi dvojnega kanala namesto skupnega stereo, dobimo skoraj dvojno bitno hitrost z isto največjo vrednostjo bitpool: 617 kbps.
Po mojem mnenju je uporaba vrednosti bitpoola, ki ni vezana na profil v fazi pogajanj, napaka v standardu A2DP, ki je privedla do umetne omejitve kakovosti SBC. Bolj smiselno bi bilo, da bi se pogajali o bitni hitrosti kot o bitpoolu.

Te fiksne vrednosti Bitpool in Bitrate izvirajo iz tabele s priporočenimi vrednostmi za uporabo za visokokakovosten zvok. Toda priporočilo ni razlog, da se omejite na te vrednosti.

Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

Specifikacija A2DP v1.2, ki je bila aktivna od leta 2007 do 2015, zahteva, da vse naprave za dekodiranje pravilno delujejo z bitnimi hitrostmi do 512 kbps:

Dekoder SNK mora podpirati vse možne vrednosti bitnih skupin, ki ne presežejo največje bitne hitrosti. Ta profil omejuje razpoložljivo največjo bitno hitrost na 320 kb/s za mono in 512 kb/s za dvokanalne načine.

V novi različici specifikacije ni omejitve bitne hitrosti. Ocenjuje se, da lahko sodobne slušalke, izdane po letu 2015, ki podpirajo EDR, podpirajo bitne hitrosti do ≈730 kbps.

Iz nekega razloga imajo skladi Bluetooth za Linux (PulseAudio), Android, Blackberry in macOS, ki sem jih preizkusil, umetne omejitve največje vrednosti parametra bitpool, ki neposredno vpliva na največjo bitno hitrost. A to ni največja težava, skoraj vse slušalke omejujejo tudi največjo bitpool vrednost na 53.
Kot sem že videl, večina naprav odlično deluje na spremenjenem skladu Bluetooth z bitno hitrostjo 551 kbps, brez prekinitev ali pokanja. Toda takšna bitna hitrost nikoli ne bo dosledna v normalnih pogojih, na običajnih skladih Bluetooth.

Spreminjanje sklada Bluetooth

Vsak sklad Bluetooth, ki je združljiv s standardom A2DP, ima podporo za dvokanalni način, vendar ga ni mogoče aktivirati iz vmesnika.

Vmesniku dodamo stikalo! Naredil sem popravke za Android 8.1 in Android 9, ki dodajo polno dvokanalno podporo v sklad, dodajo način v meni za preklop načina v orodjih za razvijalce in obravnavajo dvokanalne SBC, kot da bi bili dodaten kodek, kot je aptX , AAC ali LDAC (Android temu reče HD Audio), tako da dodate kljukico k nastavitvam naprave Bluetooth. Takole izgleda:

Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

Popravek za Android 9
Popravek za Android 8.1

Ko je potrditveno polje aktivirano, se zvok Bluetooth začne prenašati z bitno hitrostjo 551 kbps, če slušalke podpirajo hitrost povezave 3 Mbit/s, oz 452 kbps, če slušalke podpirajo le 2 Mbit/s.

Ta popravek je vključen v naslednje alternativne vdelane programske opreme:

  • LineageOS
  • Vstajenje remiks
  • crDroid

Od kod 551 in 452 kbit/s?

Tehnologija izmenjave zraka Bluetooth je zasnovana za učinkovit prenos velikih paketov fiksne velikosti. Prenos podatkov poteka v režah, največje število rež, poslanih v enem prenosu, je 5. Obstajajo tudi načini prenosa, ki uporabljajo 1 ali 3 reže, ne pa 2 ali 4. V 5 režah lahko prenesete do 679 bajtov pri hitrosti povezave 2 Mbit/s in do 1021 bajtov pri hitrosti 3 Mbit/s, pri 3 pa 367 oziroma 552 bajtov.

Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

Če želimo prenesti manj podatkov od 679 ali 1021 bajtov, vendar več kot 367 ali 552 bajtov, bo prenos še vedno zavzemal 5 slotov in podatki bodo preneseni v istem času, kar zmanjša učinkovitost prenosa.

Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

SBC v dvokanalnem načinu, pri 44100 Hz zvoku s parametri Bitpool 38, 16 blokov na okvir, 8 frekvenčnih območij, kodira zvok v 164 bajtne okvirje, z bitno hitrostjo 452 kbps.
Zvok mora biti enkapsuliran v protokolih za prenos L2CAP in AVDTP, ki vzamejo 16 bajtov iz zvočnega tovora.

Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

Tako lahko en prenos Bluetooth s 5 režami sprejme 4 zvočne okvirje:

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

V poslani paket spravimo 11.7 ms zvočnih podatkov, ki bodo poslani v 3.75 ms, v paketu pa nam ostane še 6 neuporabljenih bajtov.
Če malo povečaš bitpool, ne bo več mogoče zapakirati 4 zvočnih okvirjev v en paket. Poslati boste morali 3 sličice naenkrat, kar zmanjša učinkovitost prenosa, zmanjša količino prenesenega zvoka na pošiljanje in hitreje privede do zatikanja zvoka v slabih radijskih pogojih.

Na enak način je bila izbrana bitna hitrost 551 kbit/s za EDR 3 Mbit/s: z Bitpool 47, 16 blokov na okvir, 8 frekvenčnih območij, velikost okvirja je 200 bajtov, z bitno hitrostjo 551 kbit/s. En paket vsebuje 5 sličic ali 14.6 ms glasbe.

Algoritem za izračun vseh parametrov SBC je precej zapleten, zlahka se zmedete, če računate ročno, zato sem za pomoč zainteresiranim naredil interaktivni kalkulator: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Zakaj je vse to potrebno?

V nasprotju s splošnim prepričanjem o kakovosti zvoka kodeka aptX lahko pri nekaterih datotekah povzroči slabše rezultate kot SBC s standardno bitno hitrostjo 328 kbps.

SBC dinamično dodeljuje kvantizacijske bite frekvenčnim pasovom na podlagi nizkega proti visokemu. Če je bila vsa bitna hitrost uporabljena za nizke in srednje frekvence, bodo visoke frekvence "odrezane" (namesto tega bo tišina).
aptX kvantizira frekvenčne pasove z enakim številom bitov ves čas, zato ima konstantno bitno hitrost: 352 kbps za 44.1 kHz, 384 kbps za 48 kHz in ne more »bitno premakniti« na tiste frekvence, ki jih najbolj potrebujejo. . Za razliko od SBC, aptX ne bo "rezal" frekvenc, ampak jim bo dodal hrup kvantizacije, zmanjšal dinamični razpon zvoka in včasih uvedel značilno prasketanje. SBC "poje podrobnosti" - zavrže najtišja območja.
V povprečju aptX v primerjavi s SBC 328k vnese manj popačenj v glasbo s širokim frekvenčnim razponom, pri glasbi z ozkim frekvenčnim razponom in širokim dinamičnim razponom pa SBC 328k včasih zmaga.

Razmislimo o posebnem primeru. Spektrogram posnetka igranja klavirja:
Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

Glavna energija je v frekvencah od 0 do 4 kHz in se nadaljuje do 10 kHz.
Spektrogram datoteke, stisnjene v aptX, izgleda takole:
Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

In tako izgleda SBC 328k.
Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

Vidimo, da je SBC 328k občasno popolnoma izklopil obseg nad 16 kHz in porabil vso razpoložljivo bitno hitrost na obsegih pod to vrednostjo. Vendar pa je aptX vnesel več popačenj v frekvenčni spekter, ki ga sliši človeško uho, kot je razvidno iz odštetega izvirnega spektrograma od spektrograma aptX (svetlejši kot je, več popačenja):
Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

Medtem ko je SBC 328k manj pokvaril signal v območju od 0 do 10 kHz in prekinil ostalo:
Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

Bitna hitrost 485 k SBC je bila dovolj za ohranitev celotnega frekvenčnega območja brez onemogočanja pasov.
Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

SBC 485k je bistveno pred aptX na tej progi v območju 0-15 kHz, z manjšo, a še vedno opazno razliko 15-22 kHz (temnejše, manj popačenja):
Spremenimo sklad Bluetooth za izboljšanje zvoka v slušalkah brez kodekov AAC, aptX in LDAC

Arhiv izvirnega zvoka, SBC in aptX.

Če preklopite na SBC z visoko bitno hitrostjo, boste dobili zvok, ki pogosto premaga aptX na vseh slušalkah. V slušalkah, ki podpirajo povezljivost 3 Mb/s EDR, bitna hitrost 551 kb/s proizvaja zvok, primerljiv z aptX HD.

Lahko narediš še več?

Popravek za Android vključuje tudi možnost nadaljnjega povečanja bitne hitrosti za naprave 2 Mbps EDR. Bitno hitrost lahko povečate s 452 kbit/s na 595 kbit/s, za ceno zmanjšanja stabilnosti prenosa v težkih radijskih pogojih.
Dovolj je, da spremenljivko persist.bluetooth.sbc_hd_higher_bitrate nastavite na 1:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Popravek ekstremne bitne hitrosti je bil doslej sprejet samo v LineageOS 15.1, ne pa tudi v 16.0.

Združljivost naprav

SBC Dual Channel podpirajo skoraj vse slušalke, zvočniki in avtomobilske glavne enote. To ni čudno - standard zahteva svojo podporo v vseh napravah za dekodiranje. Obstaja majhno število naprav, na katerih ta način povzroča težave, vendar so to osamljeni primeri.
Več podrobnosti o združljivih napravah najdete na 4pda ali XDA-razvijalci.

Primerjava zvočnih razlik

Naredil sem spletno storitev, ki kodira zvok v SBC (kot tudi aptX in aptX HD) v realnem času, neposredno v brskalniku. Z njim lahko primerjate zvok različnih profilov SBC in drugih kodekov, brez dejanskega prenosa zvoka prek Bluetootha, na poljubnih žičnih slušalkah, zvočnikih in vaši najljubši glasbi ter spreminjate parametre kodiranja neposredno med predvajanjem zvoka.
btcodecs.valdikss.org.ru/sbc-encoder

Obrnite se na razvijalce za Android

Pisal sem številnim razvijalcem skladov Bluetooth pri Googlu in jih prosil, naj razmislijo o vključitvi popravkov v glavno vejo Android - AOSP, vendar nisem prejel niti enega odgovora. Moji obliži noter Sistem popravkov Gerrit za Android prav tako je ostal brez komentarja vseh vpletenih.
Vesel bi bil, če bi mi lahko pomagali stopiti v stik z razvijalci pri Googlu in prenesti SBC HD v Android. Popravek v gerritu je že zastarel (to je ena od zgodnjih revizij) in posodobil ga bom, če bodo razvijalci zainteresirani za moje spremembe (posodobiti ga ni enostavno, nimam naprav, združljivih z Androidom Q ).

Zaključek

Uporabniki pametnih telefonov z LineageOS, Resurrection Remix in vdelano programsko opremo crDroid lahko uživajo v izboljšani kakovosti zvoka že zdaj, le aktivirajo možnost v nastavitvah naprave Bluetooth. Uporabniki Linuxa lahko z namestitvijo pridobijo tudi povečano bitno hitrost SBC obliž iz Pali Roharja, ki med drugim dodaja podporo za kodeke aptX, aptX HD in FastStream.

Vir: www.habr.com

Dodaj komentar