Para lexhimin këtë artikull, rekomandohet të lexoni artikullin e mëparshëm:
Disa përdorues të kufjeve pa tela raportojnë 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 përmirësimin e zërit është blerja e pajisjeve dhe kufjeve që mbështesin kodekët aptX dhe LDAC. Këta kodekë kërkojnë taksa licencash, prandaj pajisjet me mbështetje për ta kushtojnë më shumë.
Duket se cilësia e ulët e SBC është e përcaktuar nga kufizimet artificiale të grupeve Bluetooth dhe konfigurimeve të kufjeve, dhe ky kufizim mund të anashkalohet në çdo pajisje ekzistuese, përmes ndryshimeve softuerike në smartphone ose kompjuter.
Kodeku SBC
Kodeku SBC ka shumë parametra të ndryshëm që përcaktohen në fazën e vendosjes së lidhjes. Ndër ta:
- Numri dhe lloji i kanaleve: Joint Stereo, Stereo, Dual Channel, Mono;
- Numri i grupeve frekuencash: 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 të përdorur gjatë kuantizimit (bitpool): zakonisht, nga 2 deri në 53.
Dispositivi i dekodimit duhet të mbështesë çdo kombinim të këtyre parametrave. Dispositivi i kodimit mund të mos realizojë të gjitha.
Stekët ekzistues Bluetooth zakonisht përputhen me profilin e mëposhtëm: Joint Stereo, 8 banda, 16 blloqe, Loudness, bitpool 2..53. Ky profil kodon audio 44.1 kHz me një bitrate prej 328 kbit/s.
Parametri bitpool ndikon drejtpërdrejt në bitrate brenda një profili: sa më i lartë të jetë, aq më i lartë është bitrate, dhe për pasojë, edhe cilësia.
Megjithatë, parametri bitpool nuk është i lidhur me një profil të caktuar; ndikuese mbi bitrate janë gjithashtu një sërë parametrash të tjerë: lloji i kanaleve, numri i bandave të frekuencave, numri i blloqeve. Mund të rritet bitrate në mënyrë indirekte, duke i përputhur profilet jo standarde, pa ndryshuar bitpool.
Formula për llogaritjen e bitrate SBC
Për shembull, mënyra Dual Channel kodon kanalet veçmas, duke përdorur tërë bitpool-in për secilin nga kanalet. Duke e detyruar pajisjen të përdorë Dual Channel në vend të Joint Stereo, ne do të marrim një bitrate pothuajse të dyfishuar me të njëjtin vlerë maksimale bitpool: 617 kbit/s.
Sipas mendimit tim, përdorimi i vlerës bitpool, e cila nuk është e lidhur me profilin gjatë negociatave, është një mangësi e standardit A2DP, e cila çoi në një kufizim artificial të cilësisë SBC. Do të ishte më e arsyeshme të negociohej bitrate, jo bitpool.
Vlerat fikse të Bitpool dhe Bitrate rrjedhin nga tabela e vlerave të rekomanduara për përdorim për audio me cilësi të lartë. Por rekomandimi nuk është një arsyetim për t'u kufizuar në këto vlera.
Specifikimi A2DP v1.2, i cili ishte aktiv nga 2007 deri në 2015, kërkon që të gjitha pajisjet dekoduese të operojnë në mënyrë korrekte me bitratet deri në 512 kbit/s:
Dekoduesi i SNK duhet të mbështesë të gjitha vlerat e mundshme të bitpool që nuk rezultojnë në tejkalimin e bitratit maksimal. Ky profil kufizon bitratin maksimal të disponueshëm në 320 kbit/s për mono dhe 512 kbit/s për modulet me dy kanale.
NĂ« versionin e ri tĂ« specifikimit, nuk ka kufizime mbi bitratin. Supozohet se kufjet moderne, tĂ« lansuara pas vitit 2015 dhe qĂ« mbĂ«shtesin EDR, mund tĂ« mbĂ«shtesin bitratet deri nĂ« â730 kbit/s.
Për një arsye, staket Bluetooth të verifikuar nga unë në Linux (PulseAudio), Android, Blackberry dhe macOS kanë kufizime artificiale në vlerën maksimale të parametrit bitpool, i cili ndikon drejtpërdrejt në bitratin maksimal. Por kjo nuk është problemi më i madh, pothuajse të gjitha kufjet gjithashtu e kufizojnë vlerën maksimale të bitpool në numrin 53.
Siç kam arritur të vërtetoj, shumica e pajisjeve funksionojnë shkëlqyeshëm në një stak Bluetooth të modifikuar me bitrat 551 kbit/s, pa ndërprerje dhe zhurmë. Por një bitrat i tillë kurrë nuk do të jetë i qëndrueshëm në kushte normale, në staket normale Bluetooth.
Modifikimi i stakut Bluetooth
Në çdo stak Bluetooth që është kompatibil me standardin A2DP, ka mbështetje për modin Dual Channel, por aktivizimi i saj nga ndërfaqja nuk është i mundur.
Le të shtojmë një kalues në ndërfaqe! Unë kam bërë patches për Android 8.1 dhe Android 9, të cilat shtojnë mbështetje të plotë për Dual Channel në shtresë, shtojnë një modalitet në menunë e kalimit të modaliteteve në mjetet e zhvilluesve, dhe trajtojnë SBC me mbështetje për Dual Channel si një kodek të shtuar, si aptX, AAC ose LDAC (Android e quan këtë HD Audio), duke shtuar një shenjë në cilësimet e pajisjes Bluetooth. Ja si duket kjo:
Me aktivizimin e këtij opsioni, audios Bluetooth fillon të transmetohet me bit rate 551 kbit/s, nëse kufjet mbështesin lidhjen me shpejtësi 3 mbit/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Ă« eterit nĂ« Bluetooth Ă«shtĂ« e destinuar pĂ«r transmetimin e efektshĂ«m tĂ« paketave tĂ« mĂ«dha me madhĂ«si fikse. Transmetimi i tĂ« dhĂ«nave ndodh nĂ« slotet, me numrin mĂ« tĂ« madh tĂ« slotĂ«ve qĂ« dĂ«rgohen nĂ« njĂ« transfertĂ« qĂ« Ă«shtĂ« 5. Gjithashtu, ekzistojnĂ« moda transmetimi qĂ« pĂ«rdorin 1 ose 3 slotĂ«, por jo 2 ose 4. NĂ« 5 slotĂ« mund tĂ« transmetohen deri nĂ« 679 byte me shpejtĂ«si lidhjeje 2 mbit/s dhe deri nĂ« 1021 byte me shpejtĂ«si 3 mbit/s, ndĂ«rsa nĂ« 3 slotĂ« â 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 do të marrë gjithsesi 5 slotë, dhe të dhënat do të dërgohen në të njëjtën kohë, gjë që ul efikasitetin e transmetimit.
SBC në mënyrën Dual Channel, në audio 44100 Hz me parametra Bitpool 38, 16 blloqe në tretman, 8 gamë frekuencash, kodon audio në blloqe me madhësi 164 byte, me bitrate 452 kbps.
Audio duhet të inkapsulohet në protokollet e transmetimit L2CAP dhe AVDTP, të cilat marrin 16 byte nga ngarkesa audio e dobishme.
Kështu, në një transfertë Bluetooth me 5 slotë arrijnë të përfshihen 4 blloqe audio:
679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (koka SBC) - (164*4) = 6 Ne kemi vendosur 11.7 ms të të dhënave audio në paketë dërgimi, e cila do të transferohet brenda 3.75 ms, dhe na kanë mbetur 6 byte të papërdorur në paketë.
Nëse e rrisim pak bitpool-in, 4 kuadrate audio nuk do të jenë më në gjendje të paketohen në një paketë. Do të detyrohemi të dërgojmë 3 kuadrate në çdo herë, të cilat ulin efikasitetin e transferimit, ulin sasinë e audios që dërgohet në një paketë dhe do të shkaktojnë më shpejt ndalje në audio në kushte të këqija radiosh.
Në të njëjtën mënyrë është përcaktuar bitrate 551 kbit/s për EDR 3 Mbit/s: me Bitpool 47, 16 blloqe në kuadër, 8 gamë frekuencash, përfitojmë një madhësi kuadri prej 200 byte, në bitrate 551 kbit/s. Në një paketë mbështetet 5 kuadra ose 14.6 ms muzikë.
Algoritmi i llogaritjes së të gjitha parametrave SBC është mjaft i komplikuar, mund të konfuzohemi lehtësisht kur llogaritim manualisht, prandaj kam krijuar një kalkulator interaktiv për ata që janë të interesuar:
Pse është nevoja për gjithë këtë?
Kundër mendimit të zakonshëm mbi cilësinë e zërit të kodekës aptX, në disa skeda ai mund të japë rezultate më të dobëta se SBC me bitrate standard prej 328 kbit/s.
SBC ndan dinamikisht bitet e kvantizimit për grupe frekuencash, duke funksionuar sipas parimit "nga poshtë lart". Nëse e gjithë bitrate është përdorur për frekuencat e ulëta dhe të mesme, frekuencat më të larta do të "priten" (në vend të tyre do të ketë heshtje).
aptX kvantizon grupet frekuencash me të njëjtin numër bitësh vazhdimisht, duke e bërë atë me një bitrate të qëndrueshëm: 352 kbit/s për 44.1 kHz, 384 kbit/s për 48 kHz, dhe nuk mund "ta transferojë bitin" në ato frekuenca që kanë më shumë nevojë për to. Në dallim nga SBC, aptX nuk do të "priste" frekuencat, por do të shtonte zhurma kvantizimi në to, duke reduktuar dinamikën e audios dhe ndonjëherë duke sjellë krisje karakteristike. SBC, nga ana tjetër, "ha detaje" - heq pjesët më të qeta.
Në mesatare, në krahasim me SBC 328k, aptX sjell më pak distorzion në muzikën me një gamë të gjerë frekuencash, por në muzikën me një gamë frekuencash të ngushtë dhe një dinamikë të gjerë, SBC 328k ndonjëherë fiton.
Le ta shqyrtojmë një rast të veçantë. Spektrogrami i një regjistrimi të një loje në piano:
Energjia kryesore përqendrohet në frekuencat nga 0 deri në 4 kHz, dhe vazhdon deri në 10 kHz.
Spektrogrami i skedarit, i kompresuar në aptX, duke dukur si në vijim:
Kjo është pamja e SBC 328k.
Dallohet se SBC 328k herë pas here shkëputte plotësisht gamën mbi 16 kHz, duke shpenzuar gjithë bitratin e disponueshëm në gamat poshtë këtij vlerë. Megjithatë, aptX solli më shumë distorsione në spektrin e frekuencave të dëgjuara nga veshi njerëzor, gjë që mund të shihet në spektrin origjinal të zbritur nga spektri i aptX (më e ndritshme, më shumë distorsione):
Ndërsa SBC 328k e prishi më pak sinjalin në gama nga 0 në 10 kHz, pjesa tjetër u prenë:
Bitratit 485k SBC i mjaftoi për të ruajtur gjithë gamën e frekuencave, pa shkëputje të bandes.
SBC 485k nĂ« kĂ«tĂ« kompozitĂ« tejkalon ndjeshĂ«m aptX nĂ« gamĂ«n 0-15 kHz, dhe me njĂ« ndryshim mĂ« tĂ« vogĂ«l, por ende tĂ« dukshĂ«m â nĂ« 15-22 kHz (mĂ« e errĂ«t, mĂ« pak distorsione):
.
Duke kaluar në SBC me bitrat të lartë, do të merrni një tingull, shpesh superior ndaj aptX, në çdo palë kufjesh. Në kufje që mbështesin lidhjen EDR 3 Mb/s, bitrati 551 kbit/s ofron një tingull të krahasueshëm me aptX HD.
A mund të ketë edhe më shumë?
Në patch-in për Android ka gjithashtu një opsion për të rritur më shumë bitratin për pajisjet EDR në 2 mbit/s. Mund të rritet bitrati nga 452 kbit/s në 595 kbit/s, me koston e uljes së stabilitetit të transmetimit në kushte të komplikuara radio.
Bëni mjaft të vendosni variablën persist.bluetooth.sbc_hd_higher_bitrate në vlerën 1:
# setprop persist.bluetooth.sbc_hd_higher_bitrate 1Patch-i për bitrat ekstrem është dëgjuar deri tani vetëm në LineageOS 15.1, por jo në 16.0.
Kompatibiliteti me pajisjet
SBC Dual Channel mbĂ«shtetet praktikisht nga tĂ« gjitha kufjet, kolonat dhe pajisjet audio nĂ« automjet. Nuk Ă«shtĂ« çudi â standardi parashikon mbĂ«shtetje tĂ« tij nĂ« çdo pajisje dekoduese. Ekziston njĂ« numĂ«r i vogĂ«l pajisjesh, ku ky modus shkakton probleme, por ato janĂ« raste tĂ« vetme.
Mund të informoheni më hollësisht për pajisjet e kompatibilitetit në ose .
Krahasimi i ndryshimeve të zërit
Kam krijova një shërbim uebi që kodon audio në SBC (po ashtu edhe aptX dhe aptX HD) në kohë reale, direkt në shfletues. Me të, do të jeni në gjendje të krahasoni tingujt e profileve të ndryshme SBC dhe kodekëve të tjerë, pa e transmetuar realisht audion përmes Bluetooth-it, në çdo kufje, altoparlantë dhe muzikën tuaj të preferuar, dhe gjithashtu të ndryshoni parametrat e kodimit gjatë repartit të audios.
Kontakti me zhvilluesit e Android
Kam shkruar shumë zhvilluesve të stack-ut 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 e mia në po ashtu kanë mbetur pa komente nga ana e askujt të involvuar.
Do të isha i lumtur nëse do të asistohesha në lidhje me zhvilluesit nga Google dhe implementimin e SBC HD në Android. Patch-e në gerrit tashmë është i vjetruar (është një nga revisionet e hershme), dhe do ta përmirësoj atë nëse zhvilluesit janë të interesuar në ndryshimet e mia (nuk është e lehtë për mua ta përmirësoj, nuk kam pajisje të pajtueshme me Android Q).
Përfundimi
Përdoruesit e smartphone-ve me firmware të LineageOS, Resurrection Remix dhe crDroid mund të përfitojnë nga cilësia e përmirësuar e zërit tashmë, mjafton të aktivizoni opsionin në cilësimet e pajisjes Bluetooth. Përdoruesit e Linux gjithashtu mund të marrin një bit rate të 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
