Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

Para se të lexoni këtë artikull, rekomandohet të lexoni artikullin e mëparshëm: Audio nëpërmjet Bluetooth: detaje maksimale për profilet, kodekët dhe pajisjet

Disa përdorues të kufjeve me valë raportojnë cilësi të dobët të zërit dhe mungesë të frekuencave të larta kur përdorin kodekun standard SBC Bluetooth, 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ë tarifa licencimi, kështu që pajisjet që i mbështesin ato janë më të shtrenjta.

Rezulton se cilësia e ulët e SBC është për shkak të kufizimeve artificiale të pirgjeve Bluetooth dhe cilësimeve të kufjeve, dhe ky kufizim mund të anashkalohet në çdo pajisje ekzistuese përmes ndryshimeve të softuerit në një smartphone ose kompjuter.

Kodiku SBC

Kodeku SBC ka shumë parametra të ndryshëm që negociohen gjatë fazës së konfigurimit të lidhjes. Midis tyre:

  • Numri dhe lloji i kanaleve: Joint Stereo, Stereo, Dual Channel, Mono;
  • Numri i brezave të frekuencës: 4 ose 8;
  • Numri i blloqeve në paketë: 4, 8, 12, 16;
  • Algoritmi për shpërndarjen e biteve gjatë kuantizimit: Loudness, SNR;
  • Vlera maksimale dhe minimale e grupit të biteve të përdorura gjatë kuantizimit (bitpool): zakonisht nga 2 në 53.

Pajisja e dekodimit duhet të mbështesë çdo kombinim të këtyre parametrave. Enkoderi mund të mos zbatojë gjithçka.
Raftet ekzistuese Bluetooth zakonisht bien dakord për profilin e mëposhtëm: Joint Stereo, 8 breza, 16 blloqe, Loudness, bitpool 2..53. Ky profil kodon audio 44.1 kHz me një shpejtësi bit prej 328 kbps.
Parametri bitpool ndikon drejtpërdrejt në shpejtësinë e biteve brenda një profili: sa më i lartë të jetë, aq më i lartë është shpejtësia e biteve dhe rrjedhimisht cilësia.
Megjithatë, parametri bitpool nuk është i lidhur me një profil specifik; Shpejtësia e biteve ndikohet kryesisht nga parametra të tjerë: lloji i kanaleve, numri i brezave të frekuencës, numri i blloqeve. Ju mund të rrisni shpejtësinë e biteve në mënyrë indirekte, duke rënë dakord për profile jo standarde, pa ndryshuar bitpool.

Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

Formula për llogaritjen e shpejtësisë së biteve SBC

Për shembull, modaliteti i kanaleve të dyfishta kodon kanalet veçmas, duke përdorur të gjithë bitpool-in për secilin kanal. Duke e detyruar pajisjen të përdorë Dual Channel në vend të Joint Stereo, marrim pothuajse dyfishin e shpejtësisë së biteve me të njëjtën vlerë maksimale bitpool: 617 kbps.
Sipas mendimit tim, përdorimi i një vlere bitpool që nuk lidhet me një profil në fazën e negociatave është një defekt në standardin A2DP, i cili çoi në një kufizim artificial të cilësisë SBC. Do të kishte më shumë kuptim të negocionim shpejtësinë e biteve sesa bitpool.

Këto vlera fikse të Bitpool dhe Bitrate burojnë nga një tabelë me vlera të rekomanduara për përdorim për audio me cilësi të lartë. Por një rekomandim nuk është një arsye për t'u kufizuar në këto vlera.

Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

Specifikimi A2DP v1.2, i cili ishte aktiv nga 2007 deri në 2015, kërkon që të gjitha pajisjet e dekodimit të funksionojnë siç duhet me shpejtësi bit deri në 512 kbps:

Dekoderi i SNK duhet të mbështesë të gjitha vlerat e mundshme të bitpool-it që nuk rezultojnë në tejkalim të shpejtësisë maksimale të biteve. Ky profil kufizon shpejtësinë maksimale të disponueshme të biteve në 320 kb/s për modalitetin mono dhe 512 kb/s për modalitetet me dy kanale.

Në versionin e ri të specifikimit nuk ka asnjë kufizim në shpejtësinë e biteve. Vlerësohet se kufjet moderne të lëshuara pas vitit 2015 që mbështesin EDR mund të mbështesin shpejtësi bit deri në ≈730 kbps.

Për disa arsye, pirgjet e Linux (PulseAudio), Android, Blackberry dhe macOS Bluetooth që testova kanë kufizime artificiale në vlerën maksimale të parametrit bitpool, i cili ndikon drejtpërdrejt në shpejtësinë maksimale të biteve. Por ky nuk është problemi më i madh; pothuajse të gjitha kufjet gjithashtu kufizojnë vlerën maksimale të bitpool në 53.
Siç e kam parë tashmë, shumica e pajisjeve funksionojnë në mënyrë të përsosur në një pirg të modifikuar Bluetooth me një shpejtësi bit prej 551 kbps, pa ndërprerje ose kërcitje. Por një shpejtësi e tillë e biteve nuk do të jetë kurrë e qëndrueshme në kushte normale, në pirgjet e rregullta Bluetooth.

Modifikimi i pirgut Bluetooth

Çdo pirg Bluetooth që është i pajtueshëm me standardin A2DP ka mbështetje për modalitetin Dual Channel, por nuk është e mundur ta aktivizoni atë nga ndërfaqja.

Le të shtojmë një ndërfaqe në ndërfaqe! Unë kam bërë arnime për Android 8.1 dhe Android 9 që shtojnë mbështetjen e plotë të Dual Channel në grup, shtojnë një modalitet në menynë e ndërrimit të modalitetit në veglat e devijimit dhe trajtojnë SBC-të e aktivizuara me Dual Channel sikur të ishin një kodek shtesë si aptX , AAC ose LDAC (Androidi e quan këtë Audio HD) duke shtuar një shenjë kontrolli te cilësimet e pajisjes Bluetooth. Kështu duket:

Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

Patch për Android 9
Patch për Android 8.1

Kur aktivizohet kutia e kontrollit, audio Bluetooth fillon të transmetohet me një shpejtësi bit 551 kbps, nëse kufjet mbështesin një shpejtësi lidhjeje prej 3 Mbit/s, ose 452 kbps, nëse kufjet mbështesin vetëm 2 Mbit/s.

Ky patch përfshihet në firmware-et e mëposhtme alternative:

  • LineageOS
  • Remix i ringjalljes
  • cDroid

Nga erdhën 551 dhe 452 kbit/s?

Teknologjia e ndarjes së ajrit Bluetooth është projektuar për të transmetuar me efikasitet paketa të mëdha me madhësi fikse. Transferimi i të dhënave ndodh në lojëra elektronike, numri më i madh i sloteve të dërguara në një transferim është 5. Ekzistojnë gjithashtu mënyra transferimi që përdorin 1 ose 3 slota, por jo 2 ose 4. Në 5 slota mund të transferoni deri në 679 bajt me një shpejtësi lidhjeje prej 2 Mbit/s dhe deri në 1021 bajt me shpejtësi 3 Mbit/s, dhe përkatësisht 3 - 367 dhe 552 bajt.

Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

Nëse duam të transferojmë më pak të dhëna se 679 ose 1021 bajt, por më shumë se 367 ose 552 bajt, transferimi do të vazhdojë të marrë 5 slota dhe të dhënat do të transferohen në të njëjtën kohë, gjë që redukton efikasitetin e transferimit.

Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

SBC në modalitetin Dual Channel, në audio 44100 Hz me parametra Bitpool 38, 16 blloqe për kornizë, 8 diapazon frekuencash, kodon audion në korniza 164 bajt, me shpejtësi bit prej 452 kbps.
Audioja duhet të inkapsulohet në protokollet e transferimit L2CAP dhe AVDTP, të cilat marrin 16 bajt nga ngarkesa audio.

Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

Kështu, një transmetim Bluetooth me 5 lojëra elektronike mund të akomodojë 4 korniza audio:

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

Ne vendosim 11.7 ms të dhëna audio në paketën që dërgohet, e cila do të transmetohet në 3.75 ms, dhe ne kemi mbetur 6 bajt të papërdorur në paketë.
Nëse e ngrini pak bitpool-in, nuk do të jetë më e mundur të paketoni 4 korniza audio në një paketë. Do t'ju duhet të dërgoni 3 korniza në të njëjtën kohë, gjë që redukton efikasitetin e transmetimit, zvogëlon sasinë e transmetimit të audios për kornizë dhe do të çojë më shpejt në belbëzimin e audios në kushte të këqija radio.

Në të njëjtën mënyrë, një shpejtësi bit prej 551 kbit/s u zgjodh për EDR 3 Mbit/s: me Bitpool 47, 16 blloqe për kornizë, 8 diapazon frekuencash, madhësia e kornizës është 200 byte, me një shpejtësi bit prej 551 kbit/s. Një paketë përmban 5 korniza ose 14.6 ms muzikë.

Algoritmi për llogaritjen e të gjithë parametrave SBC është mjaft kompleks, lehtë mund të hutoheni nëse numëroni manualisht, kështu që bëra një kalkulator interaktiv për të ndihmuar të interesuarit: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Pse është e nevojshme e gjithë kjo?

Ndryshe nga besimi popullor për cilësinë e zërit të kodekut aptX, në disa skedarë ai mund të prodhojë rezultate më të këqija se SBC me një shpejtësi standarde bit prej 328 kbps.

SBC shpërndan në mënyrë dinamike bit kuantizimi në brezat e frekuencës në një bazë të ulët në të lartë. Nëse i gjithë shpejtësia e biteve është përdorur për frekuencat e ulëta dhe të mesme, frekuencat e larta do të "ndërpriten" (në vend të kësaj do të ketë heshtje).
aptX kuantizon brezat e frekuencës me të njëjtin numër bitësh gjatë gjithë kohës, kjo është arsyeja pse ai ka një shpejtësi bit-sh konstante: 352 kbps për 44.1 kHz, 384 kbps për 48 kHz dhe nuk mund të zhvendoset në ato frekuenca që kanë më shumë nevojë për to. . Ndryshe nga SBC, aptX nuk do të "shkurtojë" frekuencat, por do t'u shtojë zhurmën e kuantizimit, duke reduktuar gamën dinamike të audios dhe ndonjëherë duke futur kërcitje karakteristike. SBC "ha detaje" - hedh poshtë zonat më të qeta.
Mesatarisht, krahasuar me SBC 328k, aptX paraqet më pak shtrembërim në muzikë me një gamë të gjerë frekuencash, por në muzikë me një gamë të ngushtë frekuencash dhe një gamë të gjerë dinamike, SBC 328k ndonjëherë fiton.

Le të shqyrtojmë një rast të veçantë. Spektrogrami i një regjistrimi duke luajtur piano:
Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

Energjia kryesore qëndron në frekuencat nga 0 deri në 4 kHz dhe vazhdon deri në 10 kHz.
Spektrogrami i një skedari të ngjeshur në aptX duket si ky:
Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

Dhe kjo është se si duket SBC 328k.
Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

Mund të shihet se SBC 328k fikur në mënyrë periodike plotësisht gamën mbi 16 kHz dhe shpenzoi të gjithë shpejtësinë e disponueshme të biteve në intervalet nën këtë vlerë. Sidoqoftë, aptX futi më shumë shtrembërim në spektrin e frekuencës që dëgjohet nga veshi i njeriut, siç mund të shihet në spektrogramin origjinal të zbritur nga spektrogrami aptX (sa më i ndritshëm, aq më shumë shtrembërim):
Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

Ndërsa SBC 328k e prishi sinjalin më pak në intervalin nga 0 në 10 kHz dhe e ndërpreu pjesën tjetër:
Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

Shpejtësia e biteve 485k e SBC ishte e mjaftueshme për të ruajtur të gjithë gamën e frekuencave, pa çaktivizuar brezat.
Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

SBC 485k është dukshëm përpara aptX në këtë pistë në intervalin 0-15 kHz, me një ndryshim më të vogël, por ende të dukshëm prej 15-22 kHz (sa më i errët aq më pak shtrembërim):
Ne modifikojmë grupin Bluetooth për të përmirësuar zërin në kufje pa kodekë AAC, aptX dhe LDAC

Arkivi i audios origjinale, SBC dhe aptX.

Duke kaluar në një SBC me shpejtësi të lartë të biteve, do të merrni audio që shpesh ia kalon aptX në çdo kufje. Në kufjet që mbështesin lidhjen EDR 3 Mbps, një shpejtësi bit prej 551 kbps prodhon tinguj të krahasueshëm me aptX HD.

Mund të bëni edhe më shumë?

Patch-i Android përfshin gjithashtu një opsion për të rritur më tej shpejtësinë e biteve për pajisjet EDR 2 Mbps. Ju mund të rrisni shpejtësinë e biteve nga 452 kbit/s në 595 kbit/s, me koston e uljes së stabilitetit të transmetimit në kushte të vështira radio.
Mjafton të vendosni variablin persist.bluetooth.sbc_hd_higher_bitrate në 1:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Patch-i ekstrem i shpejtësisë së biteve deri më tani është miratuar vetëm në LineageOS 15.1, por jo në 16.0.

Përputhshmëria e pajisjes

SBC Dual Channel mbështetet nga pothuajse të gjitha kufjet, altoparlantët dhe njësitë e kokës së makinës. Kjo nuk është çudi - standardi kërkon mbështetjen e tij në çdo pajisje dekoduese. Ka një numër të vogël pajisjesh në të cilat kjo mënyrë shkakton probleme, por këto janë raste të izoluara.
Më shumë detaje rreth pajisjeve të përputhshme mund të gjenden në 4 pda ose XDA-Developers.

Krahasimi i dallimeve të zërit

Kam bërë një shërbim në internet që kodon audio në SBC (si dhe aptX dhe aptX HD) në kohë reale, pikërisht në shfletues. Me të, ju mund të krahasoni tingullin e profileve të ndryshme SBC dhe kodekëve të tjerë, pa transmetuar në fakt audio nëpërmjet Bluetooth, në çdo kufje me tela, altoparlantë dhe muzikën tuaj të preferuar, dhe gjithashtu të ndryshoni parametrat e kodimit drejtpërdrejt gjatë luajtjes së audios.
btcodecs.valdikss.org.ru/sbc-encoder

Kontaktoni me zhvilluesit e Android

U shkrova shumë zhvilluesve të stivës Bluetooth në Google duke i kërkuar që të merrnin parasysh përfshirjen e arnimeve në degën kryesore të Android - AOSP, por nuk mora asnjë përgjigje të vetme. Arnimet e mia brenda Sistemi i patch-it Gerrit për Android gjithashtu mbeti pa koment nga askush i përfshirë.
Do të isha i lumtur nëse do të mund të merrja ndihmë për të kontaktuar me zhvilluesit në Google dhe për të sjellë SBC HD në Android. Patch-i në gerrit është tashmë i vjetëruar (ky është një nga rishikimet e hershme) dhe do ta përditësoj nëse zhvilluesit janë të interesuar për ndryshimet e mia (nuk është e lehtë për mua ta përditësoj, nuk kam pajisje të përputhshme me Android Q ).

Përfundim

Përdoruesit e telefonave inteligjentë me LineageOS, Resurrection Remix dhe firmware crDroid mund të shijojnë cilësi të përmirësuar të zërit tani, thjesht aktivizoni opsionin në cilësimet e pajisjes Bluetooth. Përdoruesit e Linux-it gjithashtu mund të marrin shpejtësi të rritur të biteve SBC duke instaluar arnim nga Pali Rohar, i cili, ndër të tjera, shton mbështetjen për kodekët aptX, aptX HD dhe FastStream.

Burimi: www.habr.com

Shto një koment