Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

Prije čitanja ovog članka, preporučuje se da pročitate prethodni članak: Audio preko Bluetooth-a: što više detalja o profilima, kodecima i uređajima

Neki korisnici bežičnih slušalica prijavljuju loš kvalitet zvuka i nedostatak visokih frekvencija kada koriste standardni Bluetooth SBC kodek, koji podržavaju svi audio uređaji. Uobičajena preporuka za poboljšanje zvuka je kupovina uređaja i slušalica koje podržavaju aptX i LDAC kodeke. Ovi kodeci zahtijevaju tantijeme, tako da su uređaji koji ih podržavaju skuplji.

Ispostavilo se da je nizak kvalitet SBC-a posljedica umjetnih ograničenja Bluetooth stekova i postavki slušalica, a ovo ograničenje se može zaobići na bilo kojem postojećem uređaju promjenama softvera na pametnom telefonu ili računaru.

SBC Codec

SBC kodek ima mnogo različitih parametara koji se dogovaraju tokom faze postavljanja veze. Među njima:

  • Broj i vrsta kanala: Joint Stereo, Stereo, Dual Channel, Mono;
  • Broj frekvencijskih opsega: 4 ili 8;
  • Broj blokova u paketu: 4, 8, 12, 16;
  • Algoritam alokacije bitova kvantizacije: glasnoća, SNR;
  • Maksimalna i minimalna vrijednost skupa bitova koji se koriste u kvantizaciji (bitpool): obično, od 2 do 53.

Dekoder mora podržavati bilo koju kombinaciju ovih parametara. Koder možda neće implementirati sve.
Postojeći Bluetooth stekovi se obično slažu sa sljedećim profilom: Joint Stereo, 8 bendova, 16 blokova, Loudness, bitpool 2..53. Ovaj profil kodira zvuk od 44.1 kHz brzinom od 328 kbps.
Bitpool parametar direktno utječe na bitrate unutar jednog profila: što je veći, veći je bitrate, a time i kvalitet.
Međutim, postavka bitpool-a nije vezana za određeni profil; drugi parametri takođe značajno utiču na bitrate: tip kanala, broj frekvencijskih opsega, broj blokova. Bitrate možete povećati indirektno, pregovaranjem o nestandardnim profilima, bez promjene bitpool-a.

Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

SBC Formula brzine prijenosa

Na primjer, Dual Channel mod kodira kanale zasebno, koristeći cijeli bitpool za svaki kanal. Primoravanjem uređaja da koristi Dual Channel umjesto Joint Stereo, dobijamo skoro duplo veću brzinu prijenosa s istom maksimalnom vrijednošću bitpool-a od 617 kbps.
Po mom mišljenju, upotreba neprofilne bitpool vrijednosti u fazi pregovora predstavlja nedostatak u A2DP standardu, što je dovelo do vještačkog ograničenja u kvalitetu SBC-a. Bilo bi mudrije dogovoriti bitrate, a ne bitpool.

Ove fiksne Bitpool i Bitrate vrijednosti potiču iz tabele preporučenih vrijednosti za zvuk visokog kvaliteta. Ali preporuka nije razlog da se ograničite na ove vrijednosti.

Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

A2DP v1.2 specifikacija, koja je bila aktivna od 2007. do 2015., zahtijeva da svi dekoderi rade ispravno sa brzinama prijenosa do 512 kbps:

Dekoder SNK će podržavati sve moguće vrijednosti skupa bitova koje ne rezultiraju prekoračenjem maksimalne brzine prijenosa. Ovaj profil ograničava dostupnu maksimalnu brzinu prijenosa na 320 kb/s za mono i 512 kb/s za dvokanalne modove.

U novoj verziji specifikacije nema ograničenja bitrate-a. Pretpostavlja se da moderne slušalice objavljene nakon 2015. i koje podržavaju EDR mogu podržavati bit rate do ≈730 kbps.

Iz nekog razloga, Linux (PulseAudio), Android, Blackberry i macOS Bluetooth stekovi koje sam testirao imaju umjetna ograničenja maksimalne vrijednosti bitpool parametra, što direktno utiče na maksimalnu brzinu prijenosa. Ali to nije najveći problem, gotovo sve slušalice također ograničavaju maksimalnu vrijednost bitpool-a na 53.
Kao što sam već vidio, većina uređaja radi dobro na modificiranom Bluetooth steku sa bitrate-om od 551 kbps, bez prekida i problema. Ali takav bitrate nikada neće biti dogovoren u normalnim uslovima, na običnim Bluetooth stekovima.

Izmjena Bluetooth steka

U bilo kojem Bluetooth steku koji je kompatibilan sa A2DP standardom, postoji podrška za Dual Channel način rada, ali ga nije moguće aktivirati preko sučelja.

Dodajmo prekidač u interfejs! Napravio sam zakrpe za Android 8.1 i Android 9 koje dodaju punu podršku za Dual Channel u stog, dodaju mod u meni za promjenu načina rada u alatima za programere i tretiraju SBC-ove s omogućenim Dual Channel kao da su dodatni kodek poput aptX, AAC ili LDAC (Android to naziva HD Audio) dodavanjem kvačice u Bluetooth postavke uređaja. Evo kako to izgleda:

Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

Patch za Android 9
Patch za Android 8.1

Kada je potvrdni okvir aktiviran, Bluetooth audio počinje da se emituje velikom brzinom 551 kbps, ako slušalice podržavaju vezu od 3 Mbps, ili 452 kbpsako slušalice podržavaju samo 2 Mbps.

Ova zakrpa je uključena u sljedeći alternativni firmver:

  • LineageOS
  • Resurrection Remix
  • crDroid

Odakle 551 i 452 kbps?

Tehnologija dijeljenja zraka u Bluetooth-u dizajnirana je za efikasan prijenos velikih paketa fiksne veličine. Prijenos podataka se odvija u slotovima, najveći broj slotova poslatih u jednom prijenosu je 5. Postoje i načini prijenosa koji koriste 1 ili 3 slota, ali ne 2 ili 4. Do 5 bajtova može se prenijeti u 679 slotova pri brzini veze od 2 Mbps i do 1021 bajta pri brzini od 3 Mbps, odnosno 3 - 367 i 552 bajta.

Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

Ako želimo prenijeti manje podataka od 679 ili 1021 bajta, ali više od 367 ili 552 bajta, tada će prijenos i dalje trajati 5 slotova, a podaci će se prenijeti u isto vrijeme, što smanjuje efikasnost prijenosa.

Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

SBC u Dual Channel modu, na 44100 Hz zvuk sa Bitpool 38 parametara, 16 blokova po kadru, 8 frekvencijskih opsega, kodira audio u okvire od 164 bajta, sa bitrate-om od 452 kbps.
Audio mora biti inkapsuliran u L2CAP i AVDTP protokole za prijenos, koji uzimaju 16 bajtova od audio sadržaja.

Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

Dakle, u jedan Bluetooth prijenos sa 5 slotova moguće je smjestiti 4 audio okvira:

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

Stavljamo 11.7 ms audio podataka u paket za slanje koji će biti poslan za 3.75 ms, a u paketu nam je ostalo 6 neiskorištenih bajtova.
Ako malo podignete bitpool, 4 audio okvira više ne mogu biti spakovana u jedan paket. Morate poslati 3 okvira odjednom, što smanjuje efikasnost prijenosa, smanjuje količinu zvuka koji se prenosi po kadru i dovodi do bržeg zastoja zvuka u lošim radijskim uvjetima.

Na isti način odabrana je brzina prijenosa od 551 kbps za EDR 3 Mbps: kod Bitpoola 47, 16 blokova po frejmu, 8 frekvencijskih opsega, dobijena je veličina okvira od 200 bajtova, uz brzinu prijenosa od 551 kbps. Jedan paket sadrži 5 kadrova ili 14.6 ms muzike.

Algoritam za izračunavanje svih SBC parametara je prilično komplikovan, lako se možete zbuniti ako računate ručno, pa sam napravio interaktivni kalkulator da pomognem onima koji su zainteresovani: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Zašto je sve ovo potrebno?

Suprotno popularnom mišljenju o kvaliteti zvuka aptX kodeka, na nekim fajlovima može dati lošije rezultate od SBC-a sa standardnom brzinom prijenosa od 328 kbps.

SBC dinamički dodjeljuje kvantizacijske bitove frekvencijskim opsezima na način odozdo prema vrhu. Ako je cijeli bitrate korišten za donju i srednju frekvenciju, gornje frekvencije će biti "odsječene" (umjesto toga bit će tišina).
aptX kvantizira frekvencijske opsege s istim brojem bitova cijelo vrijeme, zbog čega ima konstantnu brzinu prijenosa: 352 kbps za 44.1 kHz, 384 kbps za 48 kHz, i ne može "prevesti bitove" na one frekvencije kojima su potrebni. većina. Za razliku od SBC-a, aptX neće "rezati" frekvencije, ali će im dodati šum kvantizacije, smanjujući dinamički opseg zvuka, a ponekad i uvodeći karakteristične pucketanje. SBC, s druge strane, "jede detalje" - odbacuje najtiša područja.
U proseku, u poređenju sa SBC 328k, aptX donosi manje izobličenja na muzici širokog opsega, ali na muzici uskog opsega, visokog dinamičkog opsega, SBC 328k ponekad pobeđuje.

Razmotrimo poseban slučaj. Spektrogram snimanja klavira:
Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

Glavna energija leži u frekvencijama od 0 do 4 kHz, a nastavlja se do 10 kHz.
Spektrogram datoteke komprimirane pomoću aptX-a izgleda ovako:
Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

A ovako izgleda SBC 328k.
Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

Vidi se da je SBC 328k periodično potpuno isključivao opseg iznad 16 kHz, i trošio sav raspoloživi bitrate na opsege ispod ove vrijednosti. Međutim, aptX je uveo više izobličenja u frekvencijski spektar koji se čuje ljudskom uhu, što se može vidjeti u oduzetom originalnom spektrogramu od aptX spektrograma (što je svjetlije, to je više izobličenja):
Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

Dok je SBC 328k manje pokvario signal u rasponu od 0 do 10 kHz, a ostatak odrezao:
Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

Brzina prijenosa od 485k SBC bila je dovoljna da se sačuva cijeli frekventni opseg, bez prekidanja opsega.
Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

SBC 485k na ovoj kompoziciji je dosta ispred aptX-a u rasponu od 0-15 kHz, i sa manjom, ali ipak primjetnom razlikom - u 15-22 kHz (što tamnije, to manje izobličenja):
Modifikacija Bluetooth steka radi poboljšanja zvuka na slušalicama bez AAC, aptX i LDAC kodeka

Arhiva originalnog zvuka, SBC i aptX.

Prelaskom na SBC sa velikom brzinom u bitovima, dobićete zvuk koji često nadmašuje aptX na svim slušalicama. Na slušalicama koje podržavaju 3 Mbps EDR vezu, 551 kbps proizvodi zvuk uporediv sa aptX HD.

A možda čak i više?

Zakrpa za Android također ima opciju da dodatno poveća brzinu prijenosa za 2Mbps EDR uređaje. Moguće je povećati brzinu prijenosa sa 452 kbps na 595 kbps, po cijenu smanjene stabilnosti prijenosa u teškim radio uvjetima.
Dovoljno je postaviti varijablu persist.bluetooth.sbc_hd_higher_bitrate na 1:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Zakrpa za ekstremni bitrate je prihvaćena samo u LineageOS 15.1, ali ne i u 16.0.

Kompatibilnost uređaja

SBC Dual Channel podržavaju gotovo sve slušalice, zvučnici i glavne jedinice automobila. To nije iznenađujuće - standard propisuje njegovu podršku u svim uređajima za dekodiranje. Postoji mali broj uređaja na kojima ovaj način rada uzrokuje probleme, ali to su pojedinačne instance.
Za više informacija o kompatibilnim uređajima, pogledajte 4pda ili xda-programeri.

Poređenje zvučnih razlika

Napravio sam web servis koji kodira audio u SBC (kao i aptX i aptX HD) u realnom vremenu, direktno u pretraživaču. Pomoću njega možete porediti zvuk različitih SBC profila i drugih kodeka, bez stvarnog prenosa zvuka preko Bluetooth-a, na bilo kojim žičanim slušalicama, zvučnicima i omiljenoj muzici, kao i da menjate parametre kodiranja direktno tokom audio reprodukcije.
btcodecs.valdikss.org.ru/sbc-encoder

Kontaktirajte Android programere

Pisao sam mnogim programerima Bluetooth steka u Google-u, tražeći od njih da razmotre uključivanje zakrpa u glavnu granu Androida - AOSP, ali nisam dobio niti jedan odgovor. Moje zakrpe su unutra Gerrit sistem zakrpe za Android takođe je ostao bez komentara od bilo koga uključenog.
Bio bih sretan kada bi mi se pomoglo u vezi sa programerima iz Google-a i implementacijom SBC HD-a u Android. Zakrpa u gerritu je zastarjela (jedna je od ranih revizija) i ažurirat ću je ako programeri budu zainteresirani za moje promjene (nije mi lako ažurirati je, nemam uređaje kompatibilne sa Androidom Q).

zaključak

Korisnici pametnih telefona sa LineageOS, Resurrection Remix i crDroid firmverom mogu uživati ​​u poboljšanom kvalitetu zvuka upravo sada, samo aktivirajte opciju u postavkama Bluetooth uređaja. Korisnici Linuxa također mogu dobiti povećanu brzinu prijenosa SBC-a instalacijom patch od Pali Rohara, koji između ostalog dodaje podršku za kodeke aptX, aptX HD i FastStream.

izvor: www.habr.com

Dodajte komentar