Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

Pirms Ŕī raksta lasÄ«Å”anas ieteicams izlasÄ«t iepriekŔējo rakstu: Audio, izmantojot Bluetooth: maksimāla informācija par profiliem, kodekiem un ierÄ«cēm

Daži bezvadu austiņu lietotāji ziņo par sliktu skaņas kvalitāti un augstu frekvenču trÅ«kumu, izmantojot standarta SBC Bluetooth kodeku, ko atbalsta visas audio ierÄ«ces. IzplatÄ«ts ieteikums skaņas uzlaboÅ”anai ir iegādāties ierÄ«ces un austiņas, kas atbalsta aptX un LDAC kodekus. Å iem kodekiem ir jāmaksā licencÄ“Å”anas maksa, tāpēc ierÄ«ces, kas tos atbalsta, ir dārgākas.

Izrādās, ka SBC zemā kvalitāte ir saistÄ«ta ar mākslÄ«giem Bluetooth skursteņu un austiņu iestatÄ«jumu ierobežojumiem, un Å”o ierobežojumu var apiet jebkurā esoÅ”ajā ierÄ«cē, veicot programmatÅ«ras izmaiņas viedtālrunÄ« vai datorā.

Kodeks SBC

SBC kodekam ir daudz dažādu parametru, kas tiek apspriesti savienojuma iestatÄ«Å”anas fāzē. Starp viņiem:

  • Kanālu skaits un veids: Apvienotais stereo, Stereo, Dual Channel, Mono;
  • Frekvenču joslu skaits: 4 vai 8;
  • Bloku skaits iepakojumā: 4, 8, 12, 16;
  • Algoritms bitu sadalei kvantÄ“Å”anas laikā: Skaļums, SNR;
  • KvantÄ“Å”anas laikā izmantotā bitu kopas maksimālā un minimālā vērtÄ«ba (bitpool): parasti no 2 lÄ«dz 53.

DekodÄ“Å”anas ierÄ«cei jāatbalsta jebkura Å”o parametru kombinācija. Kodētājs var neÄ«stenot visu.
EsoÅ”ie Bluetooth skursteņi parasti atbilst Ŕādam profilam: apvienotais stereo, 8 joslas, 16 bloki, skaļums, bitpool 2...53. Å is profils kodē 44.1 kHz audio ar bitu pārraides ātrumu 328 kbps.
Bitpool parametrs tieÅ”i ietekmē bitu pārraides ātrumu vienā profilā: jo lielāks tas ir, jo lielāks bitu pārraides ātrums un lÄ«dz ar to arÄ« kvalitāte.
Tomēr bitpool parametrs nav piesaistÄ«ts konkrētam profilam; Bitu pārraides ātrumu lielā mērā ietekmē arÄ« citi parametri: kanālu veids, frekvenču joslu skaits, bloku skaits. Bitu pārraides ātrumu var palielināt netieÅ”i, vienojoties par nestandarta profiliem, nemainot bitpool.

Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

Formula SBC bitu pārraides ātruma aprēķināŔanai

Piemēram, divkanālu režīms kodē kanālus atseviŔķi, katram kanālam izmantojot visu bitu kopu. Piespiežot ierÄ«ci izmantot Dual Channel, nevis Joint Stereo, mēs iegÅ«stam gandrÄ«z divkārÅ”u bitu pārraides ātrumu ar tādu paÅ”u maksimālo bitpool vērtÄ«bu: 617 kbps.
Manuprāt, ar profilu nesaistÄ«tas bitpool vērtÄ«bas izmantoÅ”ana sarunu posmā ir A2DP standarta trÅ«kums, kas izraisÄ«ja mākslÄ«gu SBC kvalitātes ierobežojumu. BÅ«tu lietderÄ«gāk apspriest bitu pārraides ātrumu, nevis bitpool.

Å Ä«s fiksētās Bitpool un Bitrate vērtÄ«bas rodas no tabulas ar ieteicamajām vērtÄ«bām izmantoÅ”anai augstas kvalitātes audio. Taču ieteikums nav iemesls aprobežoties ar Ŕīm vērtÄ«bām.

Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

A2DP v1.2 specifikācija, kas bija aktÄ«va no 2007. lÄ«dz 2015. gadam, pieprasa, lai visas dekodÄ“Å”anas ierÄ«ces pareizi darbotos ar bitu pārraides ātrumu lÄ«dz 512 kbps:

SNK dekodētājs atbalsta visas iespējamās bitpool vērtÄ«bas, kas nepārsniegs maksimālo bitu pārraides ātrumu. Å is profils ierobežo pieejamo maksimālo bitu pārraides ātrumu lÄ«dz 320 kb/s mono un 512 kb/s divu kanālu režīmiem.

Jaunajā specifikācijas versijā bitu pārraides ātrumam nav ierobežojumu. Tiek lēsts, ka modernās austiņas, kas izlaistas pēc 2015. gada un atbalsta EDR, var atbalstÄ«t bitu pārraides ātrumu lÄ«dz ā‰ˆ730 kbps.

Kādu iemeslu dēļ manis pārbaudÄ«tajiem Linux (PulseAudio), Android, Blackberry un macOS Bluetooth skursteņiem ir mākslÄ«gi ierobežoti bitpool parametra maksimālā vērtÄ«ba, kas tieÅ”i ietekmē maksimālo bitu pārraides ātrumu. Bet tā nav lielākā problēma; gandrÄ«z visas austiņas ierobežo arÄ« maksimālo bitpool vērtÄ«bu lÄ«dz 53.
Kā jau esmu redzējis, lielākā daļa ierīču strādā perfekti uz modificēta Bluetooth steka ar bitrate 551 kbps, bez pārtraukumiem un sprakŔķēm. Bet Ŕāds bitu pārraides ātrums nekad nebÅ«s konsekvents normālos apstākļos parastajos Bluetooth skursteņos.

Bluetooth steka modificēŔana

JebkurÅ” Bluetooth skurstenis, kas ir saderÄ«gs ar A2DP standartu, atbalsta Dual Channel režīmu, taču to nav iespējams aktivizēt no saskarnes.

Pievienosim interfeisam slēdzi! Esmu izveidojis ielāpus operētājsistēmai Android 8.1 un Android 9, kas pievieno pilnu divu kanālu atbalstu, pievieno režīmu režīma pārslēgÅ”anas izvēlnei izstrādātāja rÄ«kos un apstrādā ar diviem kanāliem iespējotiem SBC tā, it kā tie bÅ«tu papildu kodeki, piemēram, aptX. , AAC vai LDAC (Android to sauc par HD audio), pievienojot atzÄ«mi Bluetooth ierÄ«ces iestatÄ«jumiem. Tas izskatās Ŕādi:

Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

Ielāps operētājsistēmai Android 9
Ielāps operētājsistēmai Android 8.1

Kad izvēles rūtiņa ir aktivizēta, Bluetooth audio sāk pārraidīt ar bitu pārraides ātrumu 551 kbps, ja austiņas atbalsta savienojuma ātrumu 3 Mbit/s, vai 452 kbps, ja austiņas atbalsta tikai 2 Mbit/s.

Šis ielāps ir iekļauts Ŕādās alternatīvās programmaparatūrā:

  • LineageOS
  • AugŔāmcelÅ”anās Remix
  • crDroid

No kurienes radās 551 un 452 kbit/s?

Bluetooth gaisa koplietoÅ”anas tehnoloÄ£ija ir izstrādāta, lai efektÄ«vi pārsÅ«tÄ«tu lielas fiksēta izmēra paketes. Datu pārsÅ«tÄ«Å”ana notiek slotos, lielākais vienā pārsÅ«tÄ«Å”anas laikā nosÅ«tÄ«to slotu skaits ir 5. Ir arÄ« pārsÅ«tÄ«Å”anas režīmi, kas izmanto 1 vai 3 slotus, bet ne 2 vai 4. 5 slotos var pārsÅ«tÄ«t lÄ«dz 679 baitiem ar savienojuma ātrumu 2 Mbit/s un lÄ«dz 1021 baitam ar ātrumu 3 Mbit/s un attiecÄ«gi 3 - 367 un 552 baiti.

Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

Ja mēs vēlamies pārsÅ«tÄ«t datus mazāk par 679 vai 1021 baitiem, bet vairāk par 367 vai 552 baitiem, pārsÅ«tÄ«Å”anai joprojām bÅ«s nepiecieÅ”ami 5 sloti un dati tiks pārsÅ«tÄ«ti tajā paŔā laikā, kas samazina pārsÅ«tÄ«Å”anas efektivitāti.

Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

SBC Dual Channel režīmā, 44100 Hz audio ar Bitpool 38 parametriem, 16 bloki katrā kadrā, 8 frekvenču diapazoni, kodē audio 164 baitu kadros ar bitu pārraides ātrumu 452 kbps.
Audio ir jāiekapsulē L2CAP un AVDTP pārsÅ«tÄ«Å”anas protokolos, kas no audio slodzes aizņem 16 baitus.

Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

Tādējādi viena Bluetooth pārraide ar 5 slotiem var uzņemt 4 audio kadrus:

679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (Š·Š°Š³Š¾Š»Š¾Š²Š¾Šŗ SBC) - (164*4) = 6

NosÅ«tāmajā paketē ievietojam 11.7 ms audio datu, kas tiks pārraidÄ«ti 3.75 ms laikā, un mums ir palikuÅ”i 6 neizmantoti baiti.
Ja mazliet paaugstināsiet bitpool, vairs nevarēs iepakot 4 audio kadrus vienā paketē. Jums bÅ«s jānosÅ«ta 3 kadri vienlaikus, kas samazina pārraides efektivitāti, samazina vienā kadrā pārraidÄ«tā audio daudzumu un ātrāk novedÄ«s pie audio stostÄ«Å”anās sliktos radio apstākļos.

Tādā paŔā veidā EDR 551 Mbit/s tika izvēlēts bitu pārraides ātrums 3 kbit/s: ar Bitpool 47, 16 bloki uz kadru, 8 frekvenču diapazoni, kadra izmērs ir 200 baiti, ar bitu pārraides ātrumu 551 kbit/s. Vienā iepakojumā ir 5 kadri jeb 14.6 ms mÅ«zikas.

Visu SBC parametru aprēķināŔanas algoritms ir diezgan sarežģīts, var viegli apjukt, ja skaita manuāli, tāpēc es izveidoju interaktÄ«vu kalkulatoru, lai palÄ«dzētu interesentiem: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Kāpēc tas viss ir vajadzīgs?

Pretēji izplatītajam uzskatam par aptX kodeka skaņas kvalitāti dažos failos tas var radīt sliktākus rezultātus nekā SBC ar standarta bitu pārraides ātrumu 328 kbps.

SBC dinamiski pieŔķir kvantÄ“Å”anas bitus frekvenču joslām no zemas lÄ«dz augstai. Ja viss bitu pārraides ātrums tika izmantots zemajām un vidējām frekvencēm, augstās frekvences tiks ā€œnogrieztasā€ (tā vietā bÅ«s klusums).
aptX visu laiku kvantē frekvenču joslas ar vienādu bitu skaitu, tāpēc tam ir nemainÄ«gs bitu pārraides ātrums: 352 kbps 44.1 kHz, 384 kbps 48 kHz, un tas nevar ā€œbitu nobÄ«diā€ uz tām frekvencēm, kurām tās visvairāk vajadzÄ«gas. . AtŔķirÄ«bā no SBC, aptX ā€œnegriezÄ«sā€ frekvences, bet pievienos tām kvantÄ“Å”anas troksni, samazinot audio dinamisko diapazonu un dažkārt ievieÅ”ot raksturÄ«gu sprakŔķēŔanu. SBC ā€œÄ“d detaļasā€ - izmet klusākās vietas.
Vidēji, salÄ«dzinot ar SBC 328k, aptX rada mazāku kropļojumu mÅ«zikā ar plaÅ”u frekvenču diapazonu, bet mÅ«zikā ar Å”auru frekvenču diapazonu un plaÅ”u dinamisko diapazonu dažreiz uzvar SBC 328k.

ApskatÄ«sim Ä«paÅ”u gadÄ«jumu. Klavierspēles ieraksta spektrogramma:
Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

Galvenā enerģija atrodas frekvencēs no 0 līdz 4 kHz un turpinās līdz 10 kHz.
AptX saspiestā faila spektrogramma izskatās Ŕādi:
Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

Un Ŕādi izskatās SBC 328k.
Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

Var redzēt, ka SBC 328k periodiski pilnÄ«bā izslēdza diapazonu virs 16 kHz un iztērēja visu pieejamo bitu pārraides ātrumu diapazonos, kas bija zem Ŕīs vērtÄ«bas. Tomēr aptX ieviesa lielākus kropļojumus cilvēka ausij dzirdamajā frekvenču spektrā, kā redzams no aptX spektrogrammas atņemtajā sākotnējā spektrogrammā (jo spilgtāks, jo vairāk kropļojumu):
Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

Kamēr SBC 328k mazāk sabojāja signālu diapazonā no 0 līdz 10 kHz un pārtrauca pārējo:
Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

SBC 485 k bitu pārraides ātrums bija pietiekams, lai saglabātu visu frekvenču diapazonu, neatspējojot joslas.
Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

SBC 485k Å”ajā trasē ievērojami apsteidz aptX diapazonā no 0 lÄ«dz 15 kHz un ar mazāku, bet tomēr pamanāmu atŔķirÄ«bu - 15-22 kHz (jo tumŔāks, jo mazāk kropļojumu):
Mēs modificējam Bluetooth steku, lai uzlabotu skaņu austiņās bez AAC, aptX un LDAC kodekiem

Oriģinālā audio, SBC un aptX arhīvs.

Pārslēdzoties uz liela bitu pārraides ātruma SBC, jūs iegūsit audio, kas bieži pārspēj aptX jebkurā austiņā. Austiņās, kas atbalsta 3 Mb/s EDR savienojumu, 551 kb/s bitu pārraides ātrums rada skaņu, kas ir salīdzināma ar aptX HD.

Vai varat vēl vairāk?

Android ielāps ietver arī iespēju vēl vairāk palielināt bitu pārraides ātrumu 2 Mbps EDR ierīcēm. Varat palielināt bitu pārraides ātrumu no 452 kbit/s līdz 595 kbit/s, samazinot pārraides stabilitāti sarežģītos radio apstākļos.
Pietiek iestatīt mainīgo persist.bluetooth.sbc_hd_higher_bitrate uz 1:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Ekstrēmais bitu pārraides ātruma ielāps lÄ«dz Å”im ir pieņemts tikai operētājsistēmā LineageOS 15.1, bet ne 16.0.

Ierīču saderība

SBC Dual Channel atbalsta gandrÄ«z visas austiņas, skaļruņi un automaŔīnas galvas bloki. Tas nav brÄ«nums - standartam ir nepiecieÅ”ams atbalsts jebkurā dekodÄ“Å”anas ierÄ«cē. Ir neliels skaits ierīču, kurās Å”is režīms rada problēmas, taču tie ir atseviŔķi gadÄ«jumi.
PlaŔāku informāciju par saderÄ«gām ierÄ«cēm var atrast vietnē 4pda vai XDA-izstrādātāji.

Skaņu atŔķirÄ«bu salÄ«dzinājums

Es izveidoju tÄ«mekļa pakalpojumu, kas kodē audio SBC (kā arÄ« aptX un aptX HD) reāllaikā tieÅ”i pārlÅ«kprogrammā. Ar to jÅ«s varat salÄ«dzināt dažādu SBC profilu un citu kodeku skaņu, faktiski nepārraidot audio, izmantojot Bluetooth, jebkurās vadu austiņās, skaļruņos un iecienÄ«tajā mÅ«zikā, kā arÄ« mainÄ«t kodÄ“Å”anas parametrus tieÅ”i audio atskaņoÅ”anas laikā.
btcodecs.valdikss.org.ru/sbc-encoder

Sazinieties ar Android izstrādātājiem

Es rakstÄ«ju daudziem Bluetooth steku izstrādātājiem Google, aicinot viņus apsvērt iespēju iekļaut ielāpus galvenajā Android filiālē ā€” AOSP, taču nesaņēmu nevienu atbildi. Mani ielāpi iekŔā Gerrit ielāpu sistēma operētājsistēmai Android arÄ« palika bez neviena iesaistÄ«tā komentāra.
Es bÅ«tu priecÄ«gs, ja varētu saņemt palÄ«dzÄ«bu, lai sazinātos ar Google izstrādātājiem un ieviestu SBC HD operētājsistēmā Android. Gerrit ielāps jau ir novecojis (tas ir viens no agrÄ«najiem labojumiem), un es to atjaunināŔu, ja izstrādātājus interesēs manas izmaiņas (man nav viegli to atjaunināt, man nav ierīču, kas saderÄ«gas ar Android Q ).

Secinājums

Viedtālruņu ar LineageOS, Resurrection Remix un crDroid programmaparatÅ«ru lietotāji Å”obrÄ«d var baudÄ«t uzlabotu skaņas kvalitāti, vienkārÅ”i aktivizējiet opciju Bluetooth ierÄ«ces iestatÄ«jumos. Linux lietotāji var arÄ« palielināt SBC bitu pārraides ātrumu, instalējot ielāps no Pali Rohar, kas, cita starpā, pievieno atbalstu aptX, aptX HD un FastStream kodekiem.

Avots: www.habr.com

Pievieno komentāru