Enne selle artikli lugemist on soovitatav tutvuda eelneva artikliga:
Mõned juhtmeta kõrvaklappide kasutajad on märkinud madalat helikvaliteeti ja kõrgete sageduste puudumist, kui nad kasutavad tavalist Bluetoothi koodekit SBC, mida toetavad kõik heliseadmed. Tihti soovitatakse heli parandamiseks osta seadmeid ja kõrvaklappe, mis toetavad koodekke aptX ja LDAC. Need koodekid nõuavad litsentsitasusid, seetõttu on nende toega seadmed kallimad.
Osutub, et SBC madal kvaliteet on tingitud Bluetoothi protokollide ja kõrvaklappide seadistuste kunstlikest piirangutest ning seda piirangut saab ületada mis tahes olemasolevatel seadmetel, muutes nutitelefoni või arvuti tarkvara.
Koodek SBC
SBC koodekil on mitmeid erinevaid parameetreid, mis lepitakse kokku ühenduse loomise etapis. Nende hulka kuuluvad:
- Kanali arv ja tüüp: Joint Stereo, Stereo, Dual Channel, Mono;
- Sageduslintide arv: 4 või 8;
- Paketi plokkide arv: 4, 8, 12, 16;
- Bitide jaotamise algoritm kvantimise ajal: Loudness, SNR;
- Maksimaalne ja minimaalne bitpooli väärtus, mida kasutatakse kvantimise ajal: tavaliselt 2 kuni 53.
Dekodeerimise seade peab toetama mistahes nende parameetrite kombinatsiooni. Kodeerimise seade ei pruugi rakendada kõiki neist.
Olemasolevad Bluetoothi protokollid lepitavad tavaliselt kokku järgmise profiili: Joint Stereo, 8 lint, 16 plokki, Loudness, bitpool 2..53. See profiil kodeerib 44.1 kHz heli, bitikiirus on 328 kbit/s.
Bitpooli parameeter mõjutab otse bitikiirust ühe profiili raames: mida kõrgem see on, seda kõrgem on bitikiirus ja seega ka kvaliteet.
Kuid bitpooli parameeter ei ole seotud konkreetse profiiliga; bitikiirusele avaldavad suurt mõju ka teised parameetrid: kanali tüüp, sageduse lintide arv, plokkide arv. Bitikiirus võib tõusta kaudsete mitte-standardsete profiilide leppimise kaudu, muutmata bitpooli.
SBC bitikiiruse arvutamise valem
Näiteks Dual Channel režiim kodeerib kanaleid eraldi, kasutades kogu bitpooli igas kanalis. Sundides seadet kasutama Dual Channel'i asemel Joint Stereo'd, saame peaaegu kahekordse bitikiirusena sama maksimaalse bitpooli väärtuse: 617 kbit/s.
Minu arvates on profiilivaba bitpooli väärtuse kasutamine läbirääkimiste etapis A2DP standardi puudus, mis on põhjustanud SBC kvaliteedi kunstliku piiramise. Mõistlikum oleks olnud läbirääkida bitrate'i, mitte bitpooli üle.
Sellised fikseeritud Bitpooli ja Bitrate'i väärtused tulenevad tabelist soovitatavateks kasutamiseks mõeldud väärtustega kvaliteetse audio jaoks. Kuid soovitus ei peaks olema põhjus nende väärtustega piirduda.
A2DP v1.2 spetsifikatsioon, mis oli aktiivne 2007. aastast 2015. aastani, näeb ette, et kõik dekooder-seadmed peavad õigesti töötama bitikiirustega kuni 512 kbit/s:
SNK dekooder peab toetama kõiki võimalikke bitpooli väärtusi, mis ei ületa maksimaalset bitikiirus. See profiil piirab saadavalolevat maksimaalset bitikiiruset mono puhul 320 kbit/s ja kahesuunaliste režiimide puhul 512 kbit/s.
Uues versioonis spetsifikatsioonist ei ole bitikiiruse piirangut. Eeldatakse, et kaasaegsed kõrvatropid, mis on väljastatud pärast 2015. aastat ja toetavad EDR-i, suudavad toetada bitikiirusid kuni ≈730 kbit/s.
Mingil põhjusel on minu kontrollitud Linuxi (PulseAudio), Androidi, Blackberry ja macOS Bluetoothi steekides kunstlikud piirangud bitpooli maksimaalsetele väärtustele, mis mõjutavad otseselt maksimaalset bitikiiruset. Kuid see pole suurim probleem, peaaegu kõik kõrvatropid piiravad ka maksimaalset bitpooli väärtust numbriga 53.
Nagu olen juba veendus, töötab enamik seadmeid suurepäraselt muudetud Bluetoothi steegis bitikiirusel 551 kbit/s, ilma katkestuste ja krigina. Kuid selline bitikiirus ei saa kunagi olema tavapärastes tingimustes tavapärastes Bluetoothi steekides läbiräägitud.
Muudame Bluetoothi steeki
Igas Bluetoothi steekis, mis vastab A2DP standardile, on toetav Dual Channel režiim, kuid seda ei saa liidesest aktiveerida.
Lisaame liidesesse lüliti! Olen teinud patšid Android 8.1 ja Android 9 jaoks, mis lisavad täiustatud Dual Channel toe ja lisavad režiimi arendaja tööriistade menüüsse, samuti töötlevad nad SBC-d Dual Channel toega nii, et see käitub nagu täiendav kodek, näiteks aptX, AAC või LDAC (Android nimetab seda HD Audio), lisades Bluetooth-seadetesse kontrollimise valiku. Nii see välja näeb:
Kontrollimärgi aktiveerimisel hakkab Bluetooth-i heli edastuma 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 patš on kaasatud järgmistes alternatiivsetes püsivormides:
- LineageOS
- Resurrection Remix
- crDroid
Kust pärinevad 551 ja 452 kbit/s?
Bluetoothi sageduse jagamise tehnoloogia on mõeldud suurte fikseeritud suurusega pakkide tõhusaks edastamiseks. Andmete edastamine toimub slotide kaupa, kõige rohkem slotte, mida saab ühe edastuse jooksul 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 2 Mbit/s ühenduse kiirusel ja kuni 1021 baiti 3 Mbit/s kiirusel, ning 3 slotiga vastavalt 367 ja 552 baiti.
Kui soovime edastada vähem andmeid kui 679 või 1021 baiti, kuid rohkem kui 367 või 552 baiti, kestab edastus siiski 5 sloti, ja andmed edastatakse sama aja jooksul, mis vähendab edastuse efektiivsust.
SBC Dual Channel režiimis, 44100 Hz heli Bitpool 38 parameetritega, 16 plokki raamises, 8 sagedusvahemikku, kodeerib heli raame suurusega 164 baiti, bitikiirusel 452 kbit/s.
Heli peab olema L2CAP- ja AVDTP-edastusprotokollidesse kapseldatud, mis võtavad 16 baiti audio koormusest.
Seega mahub ühte Bluetooth-edastusse 5 slotiga 4 audi raamisse:
679 (EDR 2 Mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (SBC pealkiri) - (164*4) = 6 Mahutasime 11.7 ms helidatadesse edastatava paketi, mis edastatakse 3.75 ms, ja meil jääb pakendis 6 kasutamata baiti.
Kui veidi suurendada bitpooli, ei saa 4 audi raamid enam ühte pakkesse mahutada. Tuleb saata 3 raami korraga, mis vähendab edastuse efektiivsust, vähendab ühes pakkes edastatava heli hulka ja toob kiiresti kaasa heli karglemise, kui raadiosondid on halvad.
Sama moodi on valitud bitrits 551 kbit/s EDR 3 Mbit/s jaoks: Bitpool 47, 16 plokki raamis, 8 sagedusala, mis annab raamimise suuruseks 200 baiti, bitritsiga 551 kbit/s. Ühte paketti mahub 5 raamistikku või 14.6 ms muusikat.
SBC kõikide parameetrite arvestamise algoritm on piisavalt keeruline, võib kergesti segi minna, kui arvutada käsitsi, seetõttu tegin interaktiivse kalkulaatori huvilistele:
Miks see kõik vajalik on?
Vastupidiselt levinud arvamustele aptX helikvaliteedi kohta, võib see mõningatel failidel anda halvemad tulemused kui SBC standartse bitritsiga 328 kbit/s.
SBC jaotab dünaamiliselt kvantimisse, kohandades bitti sageduspiirkondadele, toimides printsiibil „alla üles“. Kui kogu bitrits on kasutatud madalamate ja keskmiste sageduste jaoks, „lõigatakse“ ülemised sagedused ära (nende asemel tuleb vaikust).
aptX kvantifitseerib sageduspiirkondi pidevalt sama hulga bittidega, mistõttu on selle bitrits pidev: 352 kbit/s 44.1 kHz jaoks, 384 kbit/s 48 kHz jaoks, ja see ei saa „kanda bitte“ sagedustele, mis neid kõige rohkem vajavad. Erinevalt SBC-st ei „lõika“ aptX sagedusi, vaid lisab neile kvantimishelisid, vähendades helidünaamikat ja mõnikord tekitades iseloomulikke krigistusi. SBC aga „võtab ära detaile“ – jättes tähelepanuta vaiksemad kohad.
Keskmiselt, võrreldes SBC 328k-ga, toob aptX sisse vähem moonutusi laias sagedusvahemikus muusikas, kuid muusikas, millel on kitsas sagedusvahemik ja lai dünaamiline vahemik, võidab mõnikord SBC 328k.
Vaadakeme erijuhtu. Klaverimängu salvestuse spektraaldiagramm:
Põhienergia asub sagedustes vahemikus 0 kuni 4 kHz ja kestab kuni 10 kHz.
aptX-kodeeritud faili spektraaldiagramm näeb välja selline:
Ja selline on SBC 328k.
On näha, et SBC 328k katkestas perioodiliselt täielikult vahemiku üle 16 kHz ja kasutas kogu saadaolevat bitritsi madalamate sageduste jaoks. Siiski on aptX tekitanud rohkem moonutusi inimese kõrvaga kuuldavas sagedusvahemikus, mida võib näha arnitud originaalse spektraadi diagrammist aptX spektraaldiagrammist (mida eredam, seda rohkem moonutusi):
Samal ajal, kui SBC 328k rikkus signaali vahemikus 0 kuni 10 kHz vähem, siis muu - lõikas ära:
Bitrate 485k SBC piisab, et säilitada kogu sagedusvahemik, ilma et oleks katkestusi.
SBC 485k selles teoses ületab aptX 0-15 kHz vahemikus märkimisväärselt ja väiksema, kuid siiski märgatava erinevusega 15-22 kHz (mida tumedam, seda vähem moonutusi):
.
Üleminek kõrgbitrate'iga SBC-le annab sageli parema heli kui aptX, igasugustes kõrvaklappides. Kõrvaklappides, mis toetavad EDR 3 Mbit/s ühendust, annab bitrate 551 kbit/s heli, mis on võrreldav aptX HD-ga.
Kas on võimalik veelgi rohkem?
Androidi patch'is on olemas ka valik veelgi kõrgema bitrate'i suurendamiseks EDR 2 Mbit/s seadmete jaoks. Bitrate'i saab suurendada 452 kbit/s-lt 595 kbit/s-ni, stabiilsuse arvelt keerulistes raadiosuhtluse tingimustes.
Piisab, kui seada muutujaks persist.bluetooth.sbc_hd_higher_bitrate väärtus 1:
# setprop persist.bluetooth.sbc_hd_higher_bitrate 1Ekstreemse bitrate'i patch on praegu aktsepteeritud ainult LineageOS 15.1-s, aga mitte 16.0-s.
Ühilduvus seadmetega
SBC Dual Channel on toetatud praktiliselt kõigis kõrvaklappides, kõlarites ja autode peadessentes. See pole üllatav, et standard nõuab selle toetust kõigis dekodeerimisseadmetes. On vähe seadmeid, mille puhul see režiim tekitab probleeme, kuid need on üksikud juhud.
Ühilduvate seadmete kohta on rohkem teavet või .
Heli erinevuste võrdlemine
Loodud on veebiteenus, mis kodeerib heli SBC-s (ja ka aptX ja aptX HD) reaalajas, otse brauseris. Selle abil saate võrrelda erinevate SBC profiilide ja teiste kodekite heli ilma tegeliku heli edastamiseta Bluetooth'i kaudu, mis tahes kaabeldatud kõrvaklappide, kõlarite ja teie lemmikmuusikaga, samuti muuta kodeerimise parameetreid otse audio esitamise ajal.
Side Androidi arendajatega
Olen kirjutanud paljudele Google'i Bluetoothi stack'i arendajatele, paludes kaaluda patch'ide lisamist Androidi põhivõrku - AOSP, kuid ei ole saanud ühtegi vastust. Minu patch'id on samuti jäänud ilma kommentaarideta kellegilt, kes oleks seotud.
Ma oleksin tänulik, kui saaksite mind aidata Google'i arendajatega ja SBC HD integreerimisel Androidisse. Gerritis olev patch on juba aegunud (see on üks varasemaid versioone) ja ma uuendan seda, kui arendajatest on huvi minu muudatuste vastu (mul on keeruline seda uuendada, mul ei ole Android Q-ga ühilduvaid seadmeid).
Kokkuvõte
LineageOS, Resurrection Remix ja crDroid tarkvaraga nutitelefonide kasutajad võivad juba praegu nautida parandatud helikvaliteeti, piisab Bluetooth-seadme seadetes valiku aktiveerimisest. Linuxi kasutajad saavad samuti suurendada SBC bitikoormust, installides , mis lisaks muule toetab ka kodekeid aptX, aptX HD ja FastStream.
Allikas: habr.com
