Enne selle artikli lugemist on soovitatav tutvuda eelneva artikliga:
Mõned kasutajad, kes kasutavad juhtmevabu peakomplekte, märgivad madalat helikvaliteeti ja kõrgete sageduste puudumist, kui nad kasutavad standardset Bluetoothi koodekit SBC, mida toetavad kõik heliseadmed. Helikvaliteedi parandamise sagedane soovitus on osta seadmeid ja peakomplekte, mis toetavad koodekeid aptX ja LDAC. Need koodekid nõuavad litsentsitasusid, seetõttu on seadmed, mis neid toetavad, kallimad.
Selgub, et SBC madal kvaliteet on tingitud Bluetoothi stackide ja peakomplekti seadistuste kunstlikest piirangutest, mida saab ületada kõikidel olemasolevatel seadmetel, muutes nutitelefoni või arvutit tarkvaraliselt.
SBC koodek
SBC koodekil on palju erinevaid parameetreid, mis kokkulepitud ühendamise etapis. Nende hulka kuuluvad:
- Rohkete ja kanalite tüüp: Joint Stereo, Stereo, Dual Channel, Mono;
- Sageduste riba arv: 4 või 8;
- Paki plokkide arv: 4, 8, 12, 16;
- Kvantimise ajal bitimäärade jaotamise algoritm: Loudness, SNR;
- Bitpool'i kvantimise maksimaalne ja minimaalne väärtus: tavaliselt vahemikus 2 kuni 53.
Dekodeerimisseade peab toetama igasuguseid kombinatsioone nende parameetrite vahel. Edastusseade ei pruugi kõiki neist rakendada.
Olemasolevad Bluetooth’i protokollid lepivad üldiselt kokku järgmistes omadustes: Joint Stereo, 8 sagedusriba, 16 plokki, Loudness, bitpool 2..53. See profiil kodeerib 44,1 kHz audio 328 kbit/s bitikiirusel.
Bitpool'i parameeter mõjutab bitikiirusest ühes profiilis: mida kõrgem see on, seda kõrgem on bitikiirus ja seega ka kvaliteet.
Kuid bitpool'i parameeter ei ole seotud konkreetse profiiliga; bitikiirusele avaldavad samuti märkimisväärset mõju ka teised parameetrid: kanali tüüp, sagedusribade arv ja plokkide arv. Bitikiirus võib tõusta kaudsete vahenditega, leppides kokku mittestandardsetes profiilides, ilma et bitpool'i muuta.
SBC bitikiirusetootmise valem
Näiteks Dual Channel režiim kodeerib kanaleid eraldi, kasutades kogu bitpool'i iga kanali jaoks. Sundides seadet kasutama Dual Channeli asemel Joint Stereo'd, saavutame peaaegu kahekordse bitikiiruse sama maksimaalse bitpool'i väärtuse juures: 617 kbit/s.
Minu arvates on A2DP standardis profiiliga mitte seotud bitpooli väärtuse kasutamine lepingute sõlmimise etapil puudus, mis viis SBC kvaliteedi kunstliku piiramise. Mõistlikum oleks leppida kokku bitrate'is, mitte bitpoolis.
Sellised fikseeritud Bitpooli ja Bitrate'i väärtused pärinevad soovitatud kasutusväärtuste tabelist kõrgekvaliteedilise heli jaoks. Kuid soovitus ei ole põhjus, et piirata end nende väärtustega.
A2DP v1.2 spetsifikatsioon, mis oli aktiivne aastatel 2007 kuni 2015, nõuab, et kõik dekodeerivad seadmed töötaksid korrektselt bitrate'idega kuni 512 kbit/s:
SNK dekooder peab toetama kõiki võimalikke bitpooli väärtusi, mis ei ületa maksimaalset bitrate'i. See profiil piirab saadaval oleva maksimaalse bitrate'i 320 kbit/s monorežiimis ja 512 kbit/s kahekohalistes režiimides.
Uues spetsifikatsiooni versioonis pole bitrate'i piiranguid. Eeldatakse, et kaasaegsed kõrvaklapid, mis on toodetud pärast 2015. aastat ja toetavad EDR-i, võivad toetada bitrate'e kuni ≈730 kbit/s.
Mingi põhjusega on minu kontrollitud Linuxi (PulseAudio), Androidi, Blackberry ja macOS Bluetoothi stack’ides tehislikud piirangud bitpooli maksimaalse väärtuse osas, mis mõjutab otseselt maksimaalset bitikiirus. Kuid see pole kõige suurem probleem, kuna peaaegu kõik kõrvaklapid piiravad ka bitpooli maksimaalset väärtust numbriga 53.
Kuidas ma juba olen veendunud, töötavad enamik seadmeid suurepäraselt muudetud Bluetoothi stack'iga, mille bitikiirus on 551 kbit/s, ilma katkemisete ja krabinata. Kuid selline bitikiirus ei saa tavatingimustes kunagi järjepidev olla tavalistes Bluetooth'i stack'ides.
Muudetav Bluetoothi stack
Igas Bluetoothi stack'is, mis on ühilduv A2DP standardiga, on dual channel režiimi tugi, kuid selle aktiveerimine liidesest ei ole võimalik.
Lisame liidese vaatesse lüliti! Olen valmistanud plaastrid Android 8.1 ja Android 9 jaoks, mis lisavad täieliku Dual Channel toe, lisavad režiimi arendaja tööriistade menüüsse ning käsitlevad SBC-d Dual Channel toega nagu see oleks täiendav koodek, näiteks aptX, AAC või LDAC (Android nimetab seda HD Audio), lisades Bluetooth-seadme sätetesse linnukese. Nii see välja näeb:
Kui linnuke on aktiveeritud, hakkab Bluetooth-audio edastama bitikiirusel 551 kbit/s, kui kõrvaklapid toetavad 3 Mbit/s ühendust, või 452 kbit/s, kui kõrvaklapid toetavad ainult 2 Mbit/s.
See plaastr on kaasatud järgmistes alternatiivsetes firmware'des:
- LineageOS
- Resurrection Remix
- crDroid
Kust said 551 ja 452 kbit/s?
Bluetooth'i raadioefekti jagamise tehnoloogia on mõeldud suurte fikseeritud suurusega pakettide efektiivseks edastamiseks. Andmete edastus toimub slotiti, kus kõige rohkem slotte, mida saab ühe edastuse käigus saata, on 5. Samuti on edastusrežiime, mis kasutavad 1 või 3 slotti, kuid mitte 2 või 4. 5 slotiga saab edastada kuni 679 baiti kiirusel 2 Mbit/s ja kuni 1021 baiti kiirusel 3 Mbit/s, samas kui 3 slotiga on vastavad arvud 367 ja 552 baiti.
Kui soovime edastada vähem andmeid kui 679 või 1021 baiti, kuid rohkem kui 367 või 552 baiti, siis edastus kestab ikkagi 5 slotti, ning andmete edastamine toimub sama aega, mis vähendab edastuse efektiivsust.
SBC režiimis Dual Channel, 44100 Hz heli, Bitpool 38, 16 plokki raami kohta, 8 sagedusala, kodeerib heli raamideks, mille suurus on 164 baiti, andmeühiku kiirus on 452 kbit/s.
Heli peab olema kapseldatud L2CAP ja AVDTP edastusprotokollidesse, mis võtavad 16 baiti heli kasulikust koormast.
Nii saab ühe Bluetooth'i edastuse käigus, kus on 5 slotti, mahutada 4 audioraami:
679 (EDR 2 Mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (SBC pealkiri) - (164*4) = 6 Me suutisime edastada 11.7 ms audioandmeid paketis, mis saadetakse 3.75 ms jooksul, ja meil on pakkumises 6 kasutamata bitti.
Kui bitpooli veidi tõsta, ei õnnestu 4 audiofraimi enam ühte paketti pakkida. Peame saatma 3 fraimi korraga, mis vähendab edastuse efektiivsust, vähendab ühes paketis edastatavaid audio andmeid ning toob kiiremini kaasa audio kätkimise halbades raadiosuutlikkustes.
Samamoodi on bitikiirus 551 kbit/s EDR 3 Mbit/s jaoks valitud: Bitpool 47, 16 blokki raamis, 8 sagedusvahemikku, annab raamile suuruse 200 bitti, bitikiirusel 551 kbit/s. Ühte paketti mahub 5 raami või 14.6 ms muusikat.
SBC kõigi parameetrite arvutamise algoritm on piisavalt keeruline, seda on lihtne käsitsi arvutades segamini ajada, seetõttu tegin huviliste abiks interaktiivse kalkulaatori:
Miks seda kõike vaja on?
Vaatamata laialdasele arvamusele aptX-koodeki helikvaliteedi kohta võib see mõnel failil anda halvemad tulemused kui SBC tavalise bitikiirusel 328 kbit/s.
SBC eraldab kvantimisbitsid dünaamiliselt sagedusvahemike jaoks, toimides põhimõttel "ülevalt alla". Kui kogu bitimäär on kasutatud madalate ja keskmiste sageduste jaoks, siis ülemised sagedused "lõigatakse maha" (asemel on vaikus).
aptX kvantiseerib sagedusvahemikke sama arvu bittidega pidevalt, mistõttu tal on konstantne bitimäär: 352 kbit/s 44,1 kHz juures, 384 kbit/s 48 kHz juures, ja ta ei suuda "üleviia bitte" sagedustele, mis neid kõige rohkem vajavad. Erinevalt SBC-st ei lakka aptX sagedusi "lõikamisest", vaid lisab neisse kvantimise müra, vähendades heli dünaamilist ulatust ja mõnikord tuues esile iseloomulikud prõksud. SBC aga "sööb detaile" — loobub kõige vaiksematest osadest.
Keskmiselt, võrreldes SBC 328k-ga, põhjustab aptX vähem moonutusi laia sagedusvahemikuga muusikas, kuid kitsaste sagedusvahemike ja laia dünaamilise ulatusega muusikas võidab SBC 328k mõnikord.
Vaatame erijuhtu. Klaverimängu salvestise spektrigramm:
Peamine energia asub sagedustes vahemikus 0 kuni 4 kHz ja jätkub kuni 10 kHz.
aptX-s kokkusurutud faili spektrigramm näeb välja järgmine:
Sellest SBC 328k näeb välja selline.
On näha, et SBC 328k lülitas perioodiliselt täielikult välja sagedused üle 16 kHz ja kasutas kogu saadaval olevat bitikiirus madalamate sageduste jaoks. Siiski, aptX põhjustas rohkem moonutusi inims kõrva kuulmisulatuses esinevas sagedusspektris, mida on näha aptX spektraalogrammist saadud originaalse spektraalogrammi eristamisel (mida heledam, seda rohkem moonutusi):
Samas, SBC 328k rikkus signaali sageduste vahemikus 0 kuni 10 kHz vähem, samas kui ülejäänud — kärpis:
485k bitikiirus SBC-st piisas, et säilitada kogu sageduste vahemik ilma sageduste väljalülitamiseta.
SBC 485k on selle kompositsiooni puhul oluliselt parem aptX-st sageduste vahemikus 0-15 kHz ning väiksema, kuid siiski märgatava erinevusega vahemikus 15-22 kHz (mida tumedam, seda vähem moonutusi):
.
Üleminekul kõrge bitikiirusel SBC-le saad heli, mis sageli ületab aptX-i igasugustes peakomplektides. Peakomplektidel, mis toetavad EDR 3 Mbit/s ühendust, annab 551 kbit/s bitikiirus heli, mis on võrreldav aptX HD-ga.
Kas on võimalik veel rohkem?
Androidi värskenduses on ka võimalus veelgi suurendada bitikiirus 2 Mbit/s EDR seadmetele. Bitikiirus võib tõusta 452 kbit/s-lt 595 kbit/s-le, kuid see toob endaga kaasa edastamise stabiilsuse vähenemise keerulistes raadios, tingimustes.
Piisab, kui seada muutujaks persist.bluetooth.sbc_hd_higher_bitrate väärtus 1:
# setprop persist.bluetooth.sbc_hd_higher_bitrate 1Ekstreemse bitikiiruse patch on praegu vastu võetud ainult LineageOS 15.1-s, kuid mitte 16.0-s.
Ühilduvus seadmetega
SBC Dual Channel on toetatud peaaegu kõigi kõrvaklappide, kõlarite ja autode peaüksustega. See ei ole üllatav — standard nõuab selle toetust kõigis dekodeerimis seadmetes. On väike hulk seadmeid, kus see režiim tekitab probleeme, kuid need on erandid.
Ühilduvate seadmete kohta saab rohkem teavet leida või .
Heli erinevuste võrdlemine
Olen teinud veebiteenuse, mis kodeerib heli SBC (sealhulgas aptX ja aptX HD) reaalajas otse brauseris. Selle abil saate võrrelda erinevaid SBC profiile ja muid koodekaid, edastamata heli tegelikult Bluetoothi kaudu, igasugustes juhtmega kõrvaklappides, kõlarites ja teie lemmikmuusikaga, samuti muuta kodeerimisparameetreid otse ajal, mil heli mängitakse.
Suhted Androidi arendajatega
Olen kirjutanud paljudele Google'i Bluetoothi virna arendajatele, paludes kaaluda plaastrite lisamist Androidi põhiharusse — AOSP, kuid ei ole saanud vastust. Minu plaastrid on samuti jäänud kommentaarideta kellegi poolt, kes on asjaga seotud.
Oleksin tänulik, kui saaksin abi Google'i arendajatega suhtlemisel ja SBC HD rakendamisel Androidis. Gerritis olev plaastr on juba aegunud (see on üks varasemaid ülevaateid) ja uuendan seda, kui arendajatest peaksid minu muudatused huvi tundma (mul on raske seda uuendada, kuna mul ei ole Android Q-ga ühilduvaid seadmeid).
Kokkuvõte
LineageOS, Resurrection Remix ja crDroidi tarkvaraga nutitelefonide kasutajad saavad nüüd nautida paremat helikvaliteeti, piisab, kui aktiveerida valik Bluetooth-seadme seadetes. Linuxi kasutajad saavad samuti SBC kõrge bitikiirusest kasu, installides , mis muu hulgas lisab tugi kodekite aptX, aptX HD ja FastStream.
Allikas: habr.com
