Pred prečítaním tohto článku vám odporúčame prečítať si predchádzajúci článok:
Niektorí používatelia bezdrôtových slúchadiel hlásia nízku kvalitu zvuku a nedostatok vysokých frekvencií pri použití štandardného kodeku Bluetooth SBC, ktorý podporujú všetky zvukové zariadenia. Bežným odporúčaním na zlepšenie zvuku je nákup zariadení a slúchadiel, ktoré podporujú kodeky aptX a LDAC. Tieto kodeky vyžadujú licenčné poplatky, takže zariadenia, ktoré ich podporujú, sú drahšie.
Ukazuje sa, že nízka kvalita SBC je spôsobená umelými obmedzeniami Bluetooth stackov a nastavení slúchadiel a toto obmedzenie je možné obísť na akýchkoľvek existujúcich zariadeniach prostredníctvom softvérových zmien v smartfóne alebo počítači.
Kodek SBC
Kodek SBC má mnoho rôznych parametrov, ktoré sa dohodnú počas fázy nastavenia pripojenia. Medzi nimi:
- Počet a typ kanálov: Joint Stereo, Stereo, Dual Channel, Mono;
- Počet frekvenčných pásiem: 4 alebo 8;
- Počet kociek v balení: 4, 8, 12, 16;
- Algoritmus na distribúciu bitov počas kvantovania: Loudness, SNR;
- Maximálna a minimálna hodnota súboru bitov použitých počas kvantovania (bitpool): zvyčajne od 2 do 53.
Dekódovacie zariadenie musí podporovať akúkoľvek kombináciu týchto parametrov. Kódovač nemusí implementovať všetko.
Existujúce zásobníky Bluetooth sa zvyčajne zhodujú na nasledujúcom profile: Joint Stereo, 8 pásiem, 16 blokov, Loudness, bitpool 2..53. Tento profil kóduje zvuk 44.1 kHz pri bitovej rýchlosti 328 kbps.
Parameter bitového fondu priamo ovplyvňuje bitovú rýchlosť v rámci jedného profilu: čím vyššia je, tým vyššia je bitová rýchlosť, a teda aj kvalita.
Parameter bitového fondu však nie je viazaný na konkrétny profil; Bitovú rýchlosť do značnej miery ovplyvňujú aj ďalšie parametre: typ kanálov, počet frekvenčných pásiem, počet blokov. Bitový tok môžete zvýšiť nepriamo, odsúhlasením neštandardných profilov, bez zmeny bitového fondu.
Vzorec na výpočet bitovej rýchlosti SBC
Napríklad režim Dual Channel kóduje kanály oddelene, pričom pre každý kanál využíva celý bitový fond. Tým, že zariadenie prinúti používať Dual Channel namiesto Joint Stereo, získame takmer dvojnásobnú bitovú rýchlosť s rovnakou maximálnou hodnotou bitpoolu: 617 kbps.
Podľa môjho názoru je použitie hodnoty bitpoolu, ktorá nie je viazaná na profil v štádiu vyjednávania, chybou v štandarde A2DP, čo viedlo k umelému obmedzeniu kvality SBC. Zmysluplnejšie by bolo rokovať o bitovej rýchlosti ako o bitpoole.
Tieto pevné hodnoty Bitpool a Bitrate pochádzajú z tabuľky s odporúčanými hodnotami na použitie pre vysokokvalitný zvuk. Odporúčanie však nie je dôvodom na obmedzenie týchto hodnôt.
Špecifikácia A2DP v1.2, ktorá bola aktívna v rokoch 2007 až 2015, vyžaduje, aby všetky dekódovacie zariadenia správne fungovali s bitovou rýchlosťou až 512 kbps:
Dekodér SNK musí podporovať všetky možné hodnoty bitovej oblasti, ktoré neprekračujú maximálnu bitovú rýchlosť. Tento profil obmedzuje dostupnú maximálnu bitovú rýchlosť na 320 kb/s pre mono a 512 kb/s pre dvojkanálové režimy.
V novej verzii špecifikácie nie je obmedzenie bitovej rýchlosti. Odhaduje sa, že moderné slúchadlá vydané po roku 2015, ktoré podporujú EDR, môžu podporovať prenosové rýchlosti až ≈730 kbps.
Z nejakého dôvodu majú mnou testované zásobníky Bluetooth (PulseAudio), Android, Blackberry a macOS umelé limity na maximálnu hodnotu parametra bitpool, ktorý priamo ovplyvňuje maximálnu bitovú rýchlosť. To však nie je najväčší problém; takmer všetky slúchadlá tiež obmedzujú maximálnu hodnotu bitpoolu na 53.
Ako som už videl, väčšina zariadení funguje perfektne na upravenom Bluetooth stacku s bitrate 551 kbps, bez prerušenia a praskania. Takáto bitová rýchlosť však nikdy nebude konzistentná za normálnych podmienok na bežných zásobníkoch Bluetooth.
Úprava zásobníka Bluetooth
Každý Bluetooth stack, ktorý je kompatibilný so štandardom A2DP, má podporu pre režim Dual Channel, ale nie je možné ho aktivovať z rozhrania.
Pridajme prepínač do rozhrania! Urobil som záplaty pre Android 8.1 a Android 9, ktoré pridávajú plnú podporu duálneho kanála do zásobníka, pridávajú režim do ponuky prepínania režimu v nástrojoch pre vývojárov a zaobchádzajú s SBC s podporou duálneho kanála, ako keby to bol ďalší kodek ako aptX. , AAC alebo LDAC (Android to nazýva HD Audio) pridaním začiarknutia do nastavení zariadenia Bluetooth. Takto to vyzerá:
Keď je začiarkavacie políčko aktivované, zvuk Bluetooth sa začne prenášať bitovou rýchlosťou 551 kbps, ak slúchadlá podporujú rýchlosť pripojenia 3 Mbit/s, príp 452 kbps, ak slúchadlá podporujú iba 2 Mbit/s.
Táto oprava je zahrnutá v nasledujúcich alternatívnych firmvéroch:
- LineageOS
- Remix vzkriesenia
- crDroid
Kde sa vzalo 551 a 452 kbit/s?
Technológia zdieľania vzduchu Bluetooth je navrhnutá tak, aby efektívne prenášala veľké pakety pevnej veľkosti. Prenos dát prebieha v slotoch, najväčší počet slotov odoslaných pri jednom prenose je 5. Existujú aj prenosové režimy, ktoré využívajú 1 alebo 3 sloty, ale nie 2 alebo 4. V 5 slotoch môžete preniesť až 679 bajtov rýchlosťou pripojenia 2 Mbit/sa až 1021 bajtov pri rýchlosti 3 Mbit/s, resp. 3 – 367 a 552 bajtov.
Ak chceme preniesť menej dát ako 679 alebo 1021 bajtov, ale viac ako 367 alebo 552 bajtov, prenos aj tak zaberie 5 slotov a dáta sa prenesú za rovnaký čas, čo znižuje efektivitu prenosu.
SBC v režime Dual Channel, pri 44100 Hz zvuku s parametrami Bitpool 38, 16 blokov na snímku, 8 frekvenčných rozsahov, kóduje zvuk do 164 bajtových snímok s bitovou rýchlosťou 452 kbps.
Zvuk musí byť zapuzdrený v prenosových protokoloch L2CAP a AVDTP, ktoré odoberajú 16 bajtov z užitočného obsahu zvuku.
Jeden prenos Bluetooth s 5 slotmi teda môže obsahovať 4 zvukové snímky:
679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (заголовок SBC) - (164*4) = 6
Do odosielaného paketu sa nám zmestí 11.7 ms audio dát, ktoré sa prenesú za 3.75 ms a v pakete nám ostáva 6 nevyužitých bajtov.
Ak bitpool trochu nadvihnete, už nebude možné zabaliť 4 audiorámčeky do jedného balenia. Budete musieť odoslať 3 snímky naraz, čo znižuje efektivitu prenosu, znižuje množstvo zvuku prenášaného na snímku a rýchlejšie povedie k zaseknutiu zvuku v zlých rádiových podmienkach.
Rovnakým spôsobom bola zvolená bitová rýchlosť 551 kbit/s pre EDR 3 Mbit/s: pri Bitpool 47 16 blokov na snímku, 8 frekvenčných rozsahov, veľkosť snímky je 200 bajtov, s bitovou rýchlosťou 551 kbit/s. Jedno balenie obsahuje 5 snímok alebo 14.6 ms hudby.
Algoritmus na výpočet všetkých parametrov SBC je pomerne zložitý, pri ručnom počítaní sa môžete ľahko zmiasť, preto som vytvoril interaktívnu kalkulačku, ktorá pomôže záujemcom:
Prečo je toto všetko potrebné?
Na rozdiel od všeobecného presvedčenia o kvalite zvuku kodeku aptX môže pri niektorých súboroch dosahovať horšie výsledky ako SBC so štandardnou bitovou rýchlosťou 328 kbps.
SBC dynamicky prideľuje kvantizačné bity frekvenčným pásmam na báze nízkych až vysokých. Ak bola celá bitová rýchlosť použitá pre nízke a stredné frekvencie, vysoké frekvencie budú „odrezané“ (namiesto toho bude ticho).
aptX kvantuje frekvenčné pásma stále rovnakým počtom bitov, a preto má konštantnú bitovú rýchlosť: 352 kbps pre 44.1 kHz, 384 kbps pre 48 kHz a nedokáže „bit-shift“ na tie frekvencie, ktoré ich najviac potrebujú. . Na rozdiel od SBC, aptX nebude „rezať“ frekvencie, ale pridá k nim kvantizačný šum, čím zníži dynamický rozsah zvuku a niekedy zavedie charakteristické praskanie. SBC „požíva detaily“ – vyraďuje najtichšie oblasti.
V priemere v porovnaní s SBC 328k aptX prináša menšie skreslenie v hudbe so širokým frekvenčným rozsahom, ale v hudbe s úzkym frekvenčným rozsahom a širokým dynamickým rozsahom niekedy vyhráva SBC 328k.
Uvažujme o špeciálnom prípade. Spektrogram nahrávky klavírnej hry:
Hlavná energia leží vo frekvenciách od 0 do 4 kHz a pokračuje až do 10 kHz.
Spektrogram súboru komprimovaného v aptX vyzerá takto:
Je možné vidieť, že SBC 328k pravidelne úplne vypínal rozsah nad 16 kHz a všetok dostupný bitový tok spotreboval na rozsahy pod touto hodnotou. Avšak aptX zaviedol väčšie skreslenie do frekvenčného spektra počuteľného ľudským uchom, ako je možné vidieť na odčítanom pôvodnom spektrograme od spektrogramu aptX (čím jasnejšie, tým väčšie skreslenie):
Zatiaľ čo SBC 328k pokazil signál menej v rozsahu od 0 do 10 kHz a zvyšok prerušil:
Bitová rýchlosť 485 k SBC stačila na zachovanie celého frekvenčného rozsahu bez zakázania pásiem.
SBC 485k je výrazne pred aptX na tejto stope v rozsahu 0-15 kHz, s menším, ale stále viditeľným rozdielom 15-22 kHz (čím tmavšie, tým menšie skreslenie):
Prepnutím na SBC s vysokou bitovou rýchlosťou získate zvuk, ktorý často prekoná aptX na akomkoľvek slúchadle. Na slúchadlách, ktoré podporujú pripojenie 3 Mbps EDR, bitová rýchlosť 551 kbps vytvára zvuk porovnateľný s aptX HD.
Dokážete ešte viac?
Oprava pre Android obsahuje aj možnosť ďalšieho zvýšenia bitovej rýchlosti pre zariadenia EDR s rýchlosťou 2 Mbps. Môžete zvýšiť bitrate zo 452 kbit/s na 595 kbit/s, za cenu zníženia stability prenosu v náročných rádiových podmienkach.
Premennú persist.bluetooth.sbc_hd_higher_bitrate stačí nastaviť na 1:
# setprop persist.bluetooth.sbc_hd_higher_bitrate 1
Oprava extrémnej bitovej rýchlosti bola doteraz prijatá iba v LineageOS 15.1, ale nie v 16.0.
Kompatibilita zariadenia
SBC Dual Channel podporujú takmer všetky slúchadlá, reproduktory a hlavné jednotky auta. Niet sa čomu čudovať – štandard vyžaduje jeho podporu v akýchkoľvek dekódovacích zariadeniach. Existuje malý počet zariadení, na ktorých tento režim spôsobuje problémy, ale ide o izolované prípady.
Viac podrobností o kompatibilných zariadeniach nájdete na
Porovnanie rozdielov zvuku
Vytvoril som webovú službu, ktorá kóduje zvuk do SBC (ako aj aptX a aptX HD) v reálnom čase priamo v prehliadači. S ním môžete porovnávať zvuk rôznych profilov SBC a iných kodekov bez toho, aby ste skutočne prenášali zvuk cez Bluetooth, na akýchkoľvek káblových slúchadlách, reproduktoroch a obľúbenej hudbe, a tiež meniť parametre kódovania priamo počas prehrávania zvuku.
Kontaktujte vývojárov systému Android
Napísal som mnohým vývojárom Bluetooth stacku v Google a požiadal som ich, aby zvážili zahrnutie opráv do hlavnej vetvy Androidu – AOSP, ale nedostal som jedinú odpoveď. Moje náplasti v
Bol by som rád, keby som mohol získať nejakú pomoc pri kontakte s vývojármi v Google a uvedení SBC HD do Androidu. Oprava v gerrite je už zastaraná (toto je jedna z prvých revízií) a ak budú mať vývojári záujem o moje zmeny, aktualizujem ju (nie je pre mňa ľahké ju aktualizovať, nemám zariadenia kompatibilné s Androidom Q ).
Záver
Používatelia smartfónov s LineageOS, Resurrection Remix a firmvérom crDroid si už teraz môžu vychutnať vylepšenú kvalitu zvuku, stačí aktivovať možnosť v nastaveniach zariadenia Bluetooth. Používatelia Linuxu môžu tiež získať zvýšenú bitovú rýchlosť SBC inštaláciou
Zdroj: hab.com