Para lexuar këtë artikull, rekomandohet të lexoni artikullin e mëparshëm:
Disa përdorues të kufjeve pa tela raportojnë për cilësi të ulët të zërit dhe mungesë të frekuencave të larta kur përdorin kodekun standard Bluetooth SBC, i cili mbështetet nga të gjitha pajisjet audio. Një rekomandim i zakonshëm për të përmirësuar zërin është blerja e pajisjeve dhe kufjeve që mbështesin kodekët aptX dhe LDAC. Këta kodekë kërkojnë tarifat e licencës, prandaj pajisjet që i mbështesin janë më të shtrenjta.
Duket se cilësia e ulët e SBC është për shkak të kufizimeve artificiale të stekëve Bluetooth dhe konfigurimeve të kufjeve, dhe kjo kufizim mund të anashkalohet në çdo pajisje ekzistuese, përmes ndryshimeve programore të smartphone-it ose kompjuterit.
Kodeku SBC
Kodeku SBC ka shumë parametra të ndryshëm që janë dakorduar në fazën e vendosjes së lidhjes. Midis tyre:
- Numri dhe lloji i kanaleve: Joint Stereo, Stereo, Dual Channel, Mono;
- Numri i grupeve të frekuencave: 4 ose 8;
- Numri i blloqeve në paketë: 4, 8, 12, 16;
- Algoritmi i shpërndarjes së bitëve gjatë kvantizimit: Loudness, SNR;
- Vlera maksimale dhe minimale e bitpool-it, e cila përdoret gjatë kvantizimit: zakonisht, nga 2 deri në 53.
Pajisja dekoduese duhet të mbështesë çdo kombinim të këtyre parametrave. Pajisja koduese mund të realizojë jo të gjitha.
Stekët Bluetooth ekzistues zakonisht dakordojnë profilin e mëposhtëm: Joint Stereo, 8 grupe, 16 blloqe, Loudness, bitpool 2..53. Ky profil kodon audio 44.1 kHz me një bitrate prej 328 kbps.
Parametri bitpool ndikon drejtpërdrejt në bitrate brenda një profili: sa më i lartë të jetë ai, aq më i lartë është bitrate, dhe rrjedhimisht cilësia.
Megjithatë, parametri bitpool nuk është i lidhur me një profil të caktuar; ndikimi në bitrate gjithashtu ka një rëndësi të madhe nga parametrat e tjerë: lloji i kanaleve, numri i grupeve të frekuencave, numri i blloqeve. Rritja e bitrate mund të arrihet edhe në mënyrë indirekte, duke dakorduar profile jo-standard, pa ndryshuar bitpool.
Formula e llogaritjes së bitrate-it të SBC
Për shembull, moda Dual Channel kodon kanalet veçmas, duke përdorur të gjithë bitpool për secilin nga kanalet. Duke e bërë pajisjen të përdorë Dual Channel në vend të Joint Stereo, ne do të kemi gati dyfishim të bitrate-it me të njëjtin maksimum të bitpool: 617 kbps.
Sipas mendimit tim, përdorimi i një vlerës bitpool të pavaruara nga profili gjatë negocimit është një dobësi e standardit A2DP, e cila krijoi një kufizim artificial të cilësisë SBC. Do të ishte më e mençur të negocionohej bitrate, jo bitpool.
Vlerat fikse të Bitpool dhe Bitrate e kanë origjinën nga një tabelë me vlera të rekomanduara për përdorim në audio me cilësi të lartë. Por rekomandimi nuk është një arsye për t'u kufizuar në këto vlera.
Specifikimi A2DP v1.2, i cili ishte aktiv nga 2007 deri në 2015, parashikon që të gjitha pajisjet dekoduese të punojnë siç duhet me bitrate deri në 512 kb/s:
Dekoduesi i SNK duhet të mbështesë të gjitha vlerat e mundshme të bitpool që nuk rezultojnë në tejkalimin e bitrate maksimal. Ky profil limiton bitrate maksimal në 320 kb/s për mono dhe 512 kb/s për mënyrat me dy kanale.
Në versionin e ri të specifikimit, kufizimi mbi bitrate nuk ekziston. Supozohet se kufjet moderne, të lëshuar pas 2015, dhe që mbështesin EDR, mund të mbështesin bitrate deri në 730 kb/s.
Për një arsye, stekat Bluetooth të verifikuar nga unë për Linux (PulseAudio), Android, Blackberry dhe macOS kanë kufizime artificiale mbi vlerën maksimale të parametrave bitpool, e cila ndikon drejtpërdrejt në bitrate maksimale. Por kjo nuk është problemi më i madh, pothuajse të gjitha kufjet gjithashtu kufizojnë vlerën maksimale të bitpool në numrin 53.
Siç kam arritur të konstatoni, shumica e pajisjeve funksionojnë shumë mirë në një stek Bluetooth të modifikuar me bitrate 551 kb/s, pa ndërprerje dhe zhurmë. Por një bitrate i tillë kurrë nuk do të negociohet në kushte normale, në steka Bluetooth normale.
Modifikoni stekun Bluetooth
Në çdo stek Bluetooth, i cili është i pajtueshëm me standardin A2DP, ka mbështetje për modin Dual Channel, por aktivizimi i tij nga ndërfaqja nuk është i mundur.
Le të shtojmë një ndërrues në ndërfaqe! Unë kam bërë patch-e për Android 8.1 dhe Android 9, të cilat shtojnë mbështetje të plotë për Dual Channel në stek, shtojnë modin në menu ndërrimi në mjetet e zhvilluesve dhe trajtojnë SBC me mbështetje për Dual Channel si një kodek të shtuar, siç janë aptX, AAC ose LDAC (Android e quan këtë HD Audio), duke e shtuar një shenjë në cilësimet e pajisjes Bluetooth. Kështu duket:
Me aktivizimin e shenjës, audio Bluetooth fillon të transmetohet me bitrate 551 kb/s, nëse kufjet mbështesin lidhje me shpejtësi 3 mb/s, ose 452 kbit/s, nëse kufjet mbështesin vetëm 2 mbit/s.
Ky patch është i përfshirë në firmware alternative si:
- LineageOS
- Resurrection Remix
- crDroid
Nga erdhën 551 dhe 452 kbit/s?
Teknologjia e ndarjes sĂ« hapĂ«sirĂ«s nĂ« Bluetooth Ă«shtĂ« e destinuar pĂ«r tĂ« transmetuar me efikasitet paketa tĂ« mĂ«dha me madhĂ«si fikse. Transmetimi i tĂ« dhĂ«nave ndodh nĂ« slotet, numri mĂ« i madh i slotĂ«ve qĂ« dĂ«rgohen nĂ« njĂ« transmetim â 5. EkzistojnĂ« gjithashtu modulet e transmetimit qĂ« pĂ«rdorin 1 ose 3 slot, por jo 2 ose 4. NĂ« 5 slot mund tĂ« transmetohet deri nĂ« 679 byte me shpejtĂ«si lidhjeje 2 mbit/s dhe deri nĂ« 1021 byte me shpejtĂ«si 3 mbit/s, dhe nĂ« 3 â 367 dhe 552 byte pĂ«rkatĂ«sisht.
Nëse dëshirojmë të transmetojmë më pak të dhëna se 679 ose 1021 byte, por më shumë se 367 ose 552 byte, transmetimi gjithsesi do të marrë 5 slot, dhe të dhënat do të transmetohen në të njëjtin kohë, çka ul efikasitetin e transmetimit.
SBC në modin Dual Channel, në audio 44100 Hz me parametrat Bitpool 38, 16 blloqe në mobil, 8 gama frekuencash, kodon audion në mobil me madhësi 164 byte, me bitrate 452 kbit/s.
Audio duhet të jetë e inkapsuluar në protokollet e transmetimit L2CAP dhe AVDTP, të cilat marrin 16 byte nga ngarkesa audio e dobishme.
Kështu, në një dërgesë Bluetooth me 5 slot mund të vendosen 4 frame audio:
679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (koka SBC) - (164*4) = 6 Ne përmbajmë 11.7 ms të dhënash audio në paketën e dërguar, e cila do të dërgohet në 3.75 ms, dhe na kanë mbetur 6 byte të papërdorura në dërgesë.
Nëse rritet pak bitpool, 4 frame audio nuk do të mund të paketohen më në një dërgesë. Do të duhet të dërgohen 3 frame për herë, çka ul efikasitetin e transmetimit, zvogëlon sasinë e audios që transmetohet në një dërgesë, dhe do të çojë më shpejt në zhurmën e audios në kushte të këqija radio.
Po ashtu është përzgjedhur bitrate 551 kbit/s për EDR 3 mbit/s: me Bitpool 47, 16 blloqe në frame, 8 gama frekuencash rezultati është madhësia e frame 200 byte, me bitrate 551 kbit/s. Në një dërgesë mund të vendosen 5 frame ose 14.6 ms muzikë.
Algoritmi për llogaritjen e të gjitha parametrave SBC është mjaft i ndërlikuar, mund të ngatërrohesh lehtësisht nëse llogarit manualisht, prandaj kam bërë një kalkulator interaktiv në ndihmë të atyre që janë të interesuar:
Pse është e nevojshme e gjithë kjo?
Në kundërshtim me besimin e zakonshëm për cilësinë e zërit të kodekut aptX, në disa skedarë ai mund të japë rezultate më keq se SBC me një bitrate standard prej 328 kbit/s.
SBC jep dinamikisht bitet e kuantizimit për banden e frekuencës, duke vepruar sipas parimit "nga poshtë lart". Nëse të gjithë bitrate përdoret për frekuencat e ulëta dhe mesme, frekuencat e larta "priten" (zëvendësohen me heshtje).
aptX kuantizon bandat e frekuencës me të njëjtin numër bitesh konstant, çka e bën të ketë një bitrate të qëndrueshëm: 352 kbit/s për 44.1 kHz, 384 kbit/s për 48 kHz, dhe ai nuk mund "të transferojë bitet" në ato frekuenca që kanë më shumë nevojë për to. Ndryshe nga SBC, aptX nuk do "të priste" frekuencat, por do të shtonte zhurma kuantizimi, duke reduktuar dinamikën e zërit dhe ndonjëherë duke sjellë krisje karakteristike. Në të kundërt, SBC "ha detaje" - hedh baret më të qeta.
Në mesatarisht, krahasuar me SBC 328k, aptX shkakton më pak çrregullime në muzikën me një gamë të gjerë frekuencash, por në muzikën me një gamë të ngushtë frekuencash dhe një dinamikë të gjerë, SBC 328k ndonjëherë ka përparësi.
Le të shqyrtojmë një rast të veçantë. Spektrogrami i një regjistrimi të lojës në piano:
Energjia kryesore ndodhet në frekuencat nga 0 deri në 4 kHz, dhe vazhdon deri në 10 kHz.
Spektrogrami i një skedari të kompresuar në aptX duket si më poshtë:
Kështu duket SBC 328k.
ĂshtĂ« e dukshme se SBC 328k herĂ« pas here ka çaktivizuar plotĂ«sisht rangun mbi 16 kHz, dhe ka harxhuar tĂ« gjithĂ« bitrate tĂ« disponueshĂ«m pĂ«r rangjet nĂ«n kĂ«tĂ« vlerĂ«. MegjithatĂ«, aptX shkaktoi mĂ« shumĂ« çrregullime nĂ« spektin e frekuencave tĂ« dĂ«gjuara nga veshi i njeriut, gjĂ« qĂ« mund tĂ« shihet nĂ« spektrogramin e originalit tĂ« hequr nga spektrogrami i aptX (sa mĂ« e ndritshme, aq mĂ« shumĂ« çrregullime):
Ndërsa SBC 328k e shkatërroi më pak sinjalin në rangun nga 0 deri në 10 kHz, dhe pjesa tjetër - e priti:
Bitrate 485k SBC ishte mjaftueshëm për të ruajtur të gjithë rangun e frekuencave, pa deaktivizimin e banda.
SBC 485k në këtë kompozim do të përparonte dukshëm aptX në rangun 0-15 kHz, dhe me një diferencë më të vogël, por ende të dukshme - në 15-22 kHz (sa më e errët, aq më pak çrregullime):
.
Duke kaluar në SBC me bitrate të lartë, do të merrni një audio, shpesh superiore ndaj aptX, në çdo kufje. Në kufjet që mbështesin lidhjen EDR 3 mbit/s, bitrate 551 kbit/s ofron një zë që mund të krahasohet me aptX HD.
A është e mundur akoma më shumë?
Në patch-in për Android gjithashtu ka një opsion për të rritur më tej bitratin për pajisjet EDR 2 mbps. Mund të rritet bitrati nga 452 kbps në 595 kbps, me kushtin e uljes së stabilitetit të transmetimit në kushte radio të ndërlikuara.
Bën mjaft ta vendosësh ndryshoren persist.bluetooth.sbc_hd_higher_bitrate në vlerën 1:
# setprop persist.bluetooth.sbc_hd_higher_bitrate 1Patch-i për bitratin ekstrem është pranuar për momentin vetëm në LineageOS 15.1, por jo në 16.0.
Përshtatshmëria me pajisjet
SBC Dual Channel mbështetet nga pothuajse të gjitha kufjet, altoparlantët dhe pajisjet e kokës së automjeteve. Kjo nuk është befasi - standardi e thotë që duhet të mbështetet në çdo pajisje dekoduese. Ka disa pajisje në të cilat ky mod ka probleme, por ato janë raste të izoluara.
Për më shumë detaje mbi pajisjet e përputhshme, mund të vizitoni ose .
Krahasimi i ndryshimeve të zërit
Kam krijuar një shërbim në internet që kodifikon audio në SBC (përfshirë edhe aptX dhe aptX HD) në kohë reale, direkt në shfletues. Me të do të mund të krahasoni zërin e profileve të ndryshme SBC dhe kodekëve të tjerë, pa e transmetuar në fakt audio përmes Bluetooth, në çdo kufje me tel, altoparlantë, dhe muzikën tuaj të preferuar, si dhe të ndryshoni parametrat e kodifikimit në kohën e luajtjes së audios.
Këmbëngulja me zhvilluesit e Android
Kam shkruar shumë zhvilluesve të stakut Bluetooth nga Google, duke kërkuar të shqyrtojnë përfshirjen e patch-eve në degën kryesore të Android - AOSP, por nuk kam marrë asnjë përgjigje. Patch-e të miat në po ashtu kanë mbetur pa koment nga askush e lidhur.
Do të isha i lumtur nëse dikush do më ndihmonte në lidhje me zhvilluesit nga Google dhe implementimin e SBC HD në Android. Patch-i në gerrit është tashmë i vjetëruar (kjo është një nga rishikimet e hershme), dhe do ta përditësoj nëse zhvilluesit janë të interesuar për ndryshimet e mia (nuk e kam lehtë ta përditësoj, nuk kam pajisje të përshtatshme me Android Q).
Përfundim
Përdoruesit e smartphone-ve me firmware LineageOS, Resurrection Remix dhe crDroid mund të shijojnë cilësinë e përmirësuar të zërit tani, mjafton të aktivizojnë opsionin në cilësimet e pajisjes Bluetooth. Po ashtu, përdoruesit e Linux mund të përfitojnë nga bitrati i rritur SBC duke instaluar , i cili, përveç të tjerave, shton mbështetje për kodekët aptX, aptX HD dhe FastStream.
Burimi: habr.com
