Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

Enne selle artikli lugemist on soovitatav lugeda eelmist artiklit: Heli Bluetoothi ​​kaudu: maksimaalne teave profiilide, koodekite ja seadmete kohta

Mõned juhtmeta kõrvaklappide kasutajad teatavad kehvast helikvaliteedist ja kõrgete sageduste puudumisest standardse SBC Bluetoothi ​​koodeki kasutamisel, mida toetavad kõik heliseadmed. Levinud soovitus heli parandamiseks on osta seadmed ja kõrvaklapid, mis toetavad aptX ja LDAC koodekeid. Need koodekid nõuavad litsentsitasusid, seega on neid toetavad seadmed kallimad.

Selgub, et SBC madal kvaliteet on tingitud Bluetoothi ​​virnade ja kõrvaklappide seadistuste kunstlikest piirangutest ning sellest piirangust on võimalik mööda minna mis tahes olemasolevates seadmetes nutitelefoni või arvuti tarkvaramuudatustega.

Codec SBC

SBC-koodekil on palju erinevaid parameetreid, mille üle lepitakse kokku ühenduse seadistamise etapis. Nende hulgas:

  • Kanalite arv ja tüüp: Joint Stereo, Stereo, Dual Channel, Mono;
  • Sagedusribade arv: 4 või 8;
  • Plokkide arv pakendis: 4, 8, 12, 16;
  • Algoritm bittide jaotamiseks kvantiseerimise ajal: Valjus, SNR;
  • Kvantimisel kasutatava bitikogumi maksimaalne ja minimaalne väärtus (bitpool): tavaliselt 2 kuni 53.

Dekodeerimisseade peab toetama nende parameetrite mis tahes kombinatsiooni. Kodeerija ei pruugi kõike rakendada.
Olemasolevad Bluetoothi ​​virnad nõustuvad tavaliselt järgmise profiiliga: Ühine stereo, 8 riba, 16 plokki, valjusus, bitpool 2...53. See profiil kodeerib 44.1 kHz heli bitikiirusega 328 kbps.
Bitipooli parameeter mõjutab otseselt ühe profiili bitikiirust: mida suurem see on, seda suurem on bitikiirus ja seega ka kvaliteet.
Kuid bitpooli parameeter ei ole seotud konkreetse profiiliga; Bitikiirust mõjutavad suuresti ka muud parameetrid: kanalite tüüp, sagedusribade arv, plokkide arv. Saate suurendada bitikiirust kaudselt, leppides kokku mittestandardsetes profiilides, ilma bitpooli muutmata.

Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

SBC bitikiiruse arvutamise valem

Näiteks kahe kanaliga režiim kodeerib kanalid eraldi, kasutades iga kanali jaoks kogu bitikogumit. Sundides seadet Joint Stereo asemel kasutama Dual Channelit, saame sama maksimaalse bitpooli väärtusega peaaegu kahekordse bitikiiruse: 617 kbps.
Minu arvates on läbirääkimiste etapis profiiliga seostamata bitpooli väärtuse kasutamine A2DP standardi viga, mis tõi kaasa SBC kvaliteedi kunstliku piiramise. Mõistlikum oleks pidada läbirääkimisi bitikiiruse kui bitpooli üle.

Need fikseeritud bitpooli ja bitikiiruse väärtused pärinevad kvaliteetse heli jaoks soovitatavate väärtustega tabelist. Kuid soovitus ei ole põhjus nende väärtustega piirdumiseks.

Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

A2DP v1.2 spetsifikatsioon, mis oli aktiivne aastatel 2007–2015, nõuab, et kõik dekodeerimisseadmed töötaksid õigesti bitikiirusega kuni 512 kbps:

SNK dekooder peab toetama kõiki võimalikke bitpooli väärtusi, mis ei ületa maksimaalset bitikiirust. See profiil piirab saadaoleva maksimaalse bitikiiruse 320 kb/s mono ja 512 kb/s kahe kanaliga režiimide puhul.

Spetsifikatsiooni uues versioonis pole bitikiirusel piiranguid. Hinnanguliselt suudavad pärast 2015. aastat välja antud kaasaegsed EDR-i toetavad kõrvaklapid toetada bitikiirust kuni ≈730 kbps.

Millegipärast on minu testitud Linuxi (PulseAudio), Androidi, Blackberry ja macOS Bluetoothi ​​pinudel bitpooli parameetri maksimaalse väärtuse kunstlikud piirangud, mis mõjutab otseselt maksimaalset bitikiirust. Kuid see pole suurim probleem; peaaegu kõik kõrvaklapid piiravad ka maksimaalset bitpooli väärtust 53-ni.
Nagu ma juba nägin, töötavad enamik seadmeid suurepäraselt modifitseeritud Bluetoothi ​​pinal, mille bitikiirus on 551 kbps, ilma katkestuste ja praksudeta. Kuid selline bitikiirus ei ole tavatingimustes tavalistes Bluetoothi ​​virnades kunagi ühtlane.

Bluetoothi ​​virna muutmine

Iga A2DP standardiga ühilduv Bluetoothi ​​pinu toetab kahekanalilist režiimi, kuid seda pole võimalik liidesest aktiveerida.

Lisame liidesele lüliti! Olen teinud paigad operatsioonisüsteemidele Android 8.1 ja Android 9, mis lisavad virnale täieliku kahekanalilise toe, lisavad režiimi arendustööriistade režiimi lülitusmenüüsse ja kohtlevad kahe kanaliga toega SBC-sid nii, nagu oleksid need täiendavad koodekid nagu aptX. , AAC või LDAC (Android nimetab seda HD-heliks), lisades linnukese Bluetoothi ​​seadme seadetesse. See näeb välja selline:

Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

Paik Android 9 jaoks
Paik Android 8.1 jaoks

Kui märkeruut on aktiveeritud, hakatakse Bluetoothi ​​heli edastama bitikiirusega 551 kbps, kui kõrvaklapid toetavad ühenduse kiirust 3 Mbit/s või 452 kbps, kui kõrvaklapid toetavad ainult 2 Mbit/s.

See plaaster sisaldub järgmistes alternatiivsetes püsivarades:

  • LineageOS
  • Ülestõusmise Remix
  • crDroid

Kust tulid 551 ja 452 kbit/s?

Bluetoothi ​​õhujagamistehnoloogia on loodud suurte fikseeritud suurusega pakettide tõhusaks edastamiseks. Andmeedastus toimub pesades, kõige rohkem ühe ülekandega saadetud pesasid on 5. On ka edastusrežiime, mis kasutavad 1 või 3 pesa, kuid mitte 2 ega 4. 5 pesas saab ühenduse kiirusel üle kanda kuni 679 baiti 2 Mbit/s ja kuni 1021 baiti kiirusel 3 Mbit/s ning vastavalt 3 – 367 ja 552 baiti.

Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

Kui tahame edastada vähem andmeid kui 679 või 1021 baiti, aga rohkem kui 367 või 552 baiti, kulub edastuseks ikkagi 5 pesa ja andmed edastatakse sama ajaga, mis vähendab ülekande efektiivsust.

Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

SBC kahe kanaliga režiimis, 44100 Hz heli Bitpool 38 parameetriga, 16 plokki kaadri kohta, 8 sagedusvahemikku, kodeerib heli 164-baidisteks kaadriteks, bitikiirusega 452 kbps.
Heli peab olema kapseldatud L2CAP ja AVDTP edastusprotokollidesse, mis võtavad heli kasulikust koormusest 16 baiti.

Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

Seega võib üks 5 pesaga Bluetooth-edastus mahutada 4 helikaadrit:

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

Saadetavasse paketti mahutame 11.7 ms heliandmeid, mis edastatakse 3.75 ms jooksul ja meil on paketti jäänud kasutamata 6 baiti.
Kui bitpooli veidi tõsta, ei ole enam võimalik 4 helikaadrit ühte paketti pakkida. Peate saatma 3 kaadrit korraga, mis vähendab edastuse efektiivsust, kaadri kohta edastatava heli hulka ja põhjustab kehvades raadiotingimustes kiiremini heli kogelemist.

Samamoodi valiti EDR 551 Mbit/s jaoks bitikiirus 3 kbit/s: Bitpool 47-ga 16 plokki kaadri kohta, 8 sagedusvahemikku, kaadri suurus on 200 baiti, bitikiirusega 551 kbit/s. Üks pakett sisaldab 5 kaadrit ehk 14.6 ms muusikat.

Kõigi SBC parameetrite arvutamise algoritm on üsna keeruline, käsitsi loendamisel võite kergesti segadusse minna, seetõttu tegin huviliste abistamiseks interaktiivse kalkulaatori: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Miks seda kõike vaja on?

Vastupidiselt levinud arvamusele aptX-kodeki helikvaliteeti kohta võib see mõne faili puhul anda standardse bitikiirusega 328 kbps SBC-st halvemaid tulemusi.

SBC eraldab dünaamiliselt kvantimisbitid sagedusribadele madalast kõrgeni. Kui kogu bitikiirus kasutati madalate ja keskmiste sageduste jaoks, siis kõrged sagedused "lõigatakse ära" (selle asemel on vaikus).
aptX kvantib sagedusribasid kogu aeg sama bittide arvuga, mistõttu on sellel konstantne bitikiirus: 352 kHz puhul 44.1 kbps, 384 ​​kHz puhul 48 kbps ja see ei saa "bitivahetust" nendele sagedustele, mis neid kõige rohkem vajavad. . Erinevalt SBC-st ei "lõika" aptX sagedusi, vaid lisab neile kvantimismüra, vähendades heli dünaamilist ulatust ja mõnikord tekitades iseloomulikku särisemist. SBC "sööb detaile" - heidab kõige vaiksemad alad kõrvale.
Keskmiselt toob aptX võrreldes SBC 328k-ga laia sagedusalaga muusikas vähem moonutusi, kuid kitsa sagedusala ja laia dünaamilise ulatusega muusikas võidab mõnikord SBC 328k.

Vaatleme erilist juhtumit. Klaverimängu salvestuse spektrogramm:
Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

Põhienergia peitub sagedustes 0 kuni 4 kHz ja jätkub kuni 10 kHz.
AptX-is tihendatud faili spektrogramm näeb välja selline:
Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

Ja selline näeb välja SBC 328k.
Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

On näha, et SBC 328k lülitas perioodiliselt täielikult välja vahemiku üle 16 kHz ja kulutas kogu saadaoleva bitikiiruse sellest väärtusest madalamatele vahemikele. Kuid aptX tekitas inimkõrvaga kuuldavas sagedusspektris rohkem moonutusi, nagu on näha aptX spektrogrammist lahutatud algsest spektrogrammist (mida heledam, seda rohkem moonutusi):
Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

Kuigi SBC 328k rikkus signaali vähem vahemikus 0 kuni 10 kHz ja katkestas ülejäänud osa:
Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

SBC 485 XNUMX bitikiirusest piisas kogu sagedusvahemiku säilitamiseks ilma ribasid keelamata.
Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

SBC 485k on sellel rajal 0–15 kHz vahemikus märkimisväärselt ees aptX-ist, väiksema, kuid siiski märgatava erinevusega 15–22 kHz (mida tumedam, seda vähem moonutusi):
Muudame Bluetoothi ​​pinu, et parandada heli ilma AAC, aptX ja LDAC koodekiteta kõrvaklappides

Originaalheli, SBC ja aptX arhiiv.

Kui lülitate suure bitikiirusega SBC-le, saate heli, mis sageli ületab aptX-i mis tahes kõrvaklappide puhul. Kõrvaklappides, mis toetavad 3 Mbps EDR-ühenduvust, tekitab 551 kbps bitikiirus heli, mis on võrreldav aptX HD-ga.

Kas sa suudad veelgi rohkem?

Androidi plaaster sisaldab ka võimalust 2 Mbps EDR-seadmete bitikiirust veelgi suurendada. Saate suurendada bitikiirust 452 kbit/s-lt 595 kbit/s-le, vähendades sellega edastuse stabiilsust keerulistes raadiooludes.
Piisab, kui määrata muutuja persist.bluetooth.sbc_hd_higher_bitrate väärtuseks 1:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Äärmuslik bitikiirusega plaaster on seni kasutusele võetud ainult operatsioonisüsteemis LineageOS 15.1, kuid mitte 16.0-s.

Seadme ühilduvus

SBC Dual Channeli toetavad peaaegu kõik kõrvaklapid, kõlarid ja auto peakomplektid. See pole ime - standard nõuab selle tuge kõigis dekodeerimisseadmetes. See režiim põhjustab probleeme vähesel arvul seadmetel, kuid need on üksikud juhtumid.
Lisateavet ühilduvate seadmete kohta leiate aadressilt W4bsitXNUMX-dns.com või XDA-arendajad.

Helierinevuste võrdlus

Tegin veebiteenuse, mis kodeerib heli SBC-sse (nagu ka aptX ja aptX HD) reaalajas, otse brauseris. Sellega saate võrrelda erinevate SBC-profiilide ja muude koodekite heli, ilma tegelikult Bluetoothi ​​kaudu heli edastamata, mis tahes juhtmega kõrvaklappides, kõlarites ja oma lemmikmuusikas ning muuta ka kodeerimisparameetreid otse heli esitamise ajal.
btcodecs.valdikss.org.ru/sbc-encoder

Võtke ühendust Androidi arendajatega

Kirjutasin paljudele Google'i Bluetoothi ​​virna arendajatele, paludes neil kaaluda plaastrite lisamist Androidi peamisse harusse – AOSP-sse, kuid ei saanud ühtegi vastust. Minu plaastrid sisse Gerriti plaastrisüsteem Androidile samuti jäi ilma ühegi asjaosalise kommentaarita.
Mul oleks hea meel, kui saaksin abi Google'i arendajatega ühenduse võtmisel ja SBC HD toomisel Androidi. Gerritis olev plaaster on juba aegunud (see on üks varajastest versioonidest) ja värskendan seda, kui arendajad on minu muudatustest huvitatud (mul pole seda lihtne värskendada, mul pole Android Q-ga ühilduvaid seadmeid ).

Järeldus

LineageOS-i, Resurrection Remixi ja crDroid püsivaraga nutitelefonide kasutajad saavad kohe nautida paremat helikvaliteeti, lihtsalt aktiveerige see valik Bluetoothi ​​seadme seadetes. Linuxi kasutajad saavad installimisega suurendada ka SBC bitikiirust plaaster Pali Roharilt, mis muuhulgas lisab tuge aptX, aptX HD ja FastStream koodekitele.

Allikas: www.habr.com

Lisa kommentaar