Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

Ennen tämän artikkelin lukemista on suositeltavaa lukea edellinen artikkeli: Ääni Bluetoothin kautta: maksimitiedot profiileista, koodekeista ja laitteista

Jotkut langattomien kuulokkeiden käyttäjät ilmoittavat huonosta äänenlaadusta ja korkeiden taajuuksien puutteesta, kun he käyttävät standardia SBC Bluetooth -koodekkia, jota kaikki äänilaitteet tukevat. Yleinen suositus äänen parantamiseksi on ostaa laitteita ja kuulokkeita, jotka tukevat aptX- ja LDAC-koodekkeja. Nämä koodekit vaativat lisenssimaksuja, joten niitä tukevat laitteet ovat kalliimpia.

Osoittautuu, että SBC:n heikko laatu johtuu Bluetooth-pinojen ja kuulokeasetusten keinotekoisista rajoituksista, ja tämä rajoitus voidaan ohittaa kaikilla olemassa olevilla laitteilla älypuhelimen tai tietokoneen ohjelmistomuutoksilla.

Codec SBC

SBC-koodekissa on monia erilaisia ​​parametreja, joista neuvotellaan yhteyden muodostusvaiheen aikana. Heidän joukossa:

  • Kanavien lukumäärä ja tyyppi: Yhteisstereo, Stereo, Dual Channel, Mono;
  • Taajuuskaistojen lukumäärä: 4 tai 8;
  • Lohkojen lukumäärä pakkauksessa: 4, 8, 12, 16;
  • Algoritmi bittien jakamiseksi kvantisoinnin aikana: Loudness, SNR;
  • Kvantisoinnin aikana käytetyn bittijoukon (bittipooli) enimmäis- ja vähimmäisarvo: yleensä 2 - 53.

Dekoodauslaitteen on tuettava mitä tahansa näiden parametrien yhdistelmää. Enkooderi ei välttämättä toteuta kaikkea.
Olemassa olevat Bluetooth-pinot sopivat yleensä seuraavasta profiilista: Yhteinen stereo, 8 kaistaa, 16 lohkoa, Loudness, bitpool 2...53. Tämä profiili koodaa 44.1 kHz:n ääntä bittinopeudella 328 kbps.
Bittipooliparametri vaikuttaa suoraan yhden profiilin bittinopeuteen: mitä suurempi se on, sitä suurempi bittinopeus ja siten myös laatu.
Bittipooliparametria ei kuitenkaan ole sidottu tiettyyn profiiliin; Bittinopeuteen vaikuttavat suurelta osin myös muut parametrit: kanavien tyyppi, taajuuskaistojen määrä, lohkojen määrä. Voit kasvattaa bittinopeutta epäsuorasti, sopimalla epästandardeista profiileista, muuttamatta bitpoolia.

Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

SBC-bittinopeuden laskentakaava

Esimerkiksi Dual Channel -tila koodaa kanavat erikseen käyttämällä kunkin kanavan koko bittipoolia. Pakottamalla laitteen käyttämään kaksoiskanavaa yhteisstereon sijaan, saamme lähes kaksinkertaisen bittinopeuden samalla maksimibittipoolin arvolla: 617 kbps.
Mielestäni profiiliin sidomattoman bitpool-arvon käyttö neuvotteluvaiheessa on A2DP-standardin virhe, joka johti SBC-laadun keinotekoiseen rajoittamiseen. Olisi järkevämpää neuvotella bittinopeudesta bitpoolin sijaan.

Nämä kiinteät Bitpool- ja Bitrate-arvot ovat peräisin taulukosta, joka sisältää suositeltuja arvoja korkealaatuisen äänen käyttöön. Mutta suositus ei ole syy rajoittua näihin arvoihin.

Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

A2DP v1.2 -spesifikaatio, joka oli aktiivinen vuosina 2007–2015, edellyttää, että kaikki dekoodauslaitteet toimivat oikein jopa 512 kbps:n bittinopeudella:

SNK:n dekooderin tulee tukea kaikkia mahdollisia bitpooliarvoja, jotka eivät johda maksimibittinopeuden ylitykseen. Tämä profiili rajoittaa käytettävissä olevan maksimibittinopeuden 320 kb/s mono- ja 512kb/s kaksikanavaisissa tiloissa.

Spesifikaatioiden uudessa versiossa bittinopeudella ei ole rajoitusta. On arvioitu, että vuoden 2015 jälkeen julkaistut modernit kuulokkeet, jotka tukevat EDR:ää, voivat tukea jopa ≈730 kbps:n bittinopeutta.

Jostain syystä testaamillani Linux- (PulseAudio), Android-, Blackberry- ja macOS Bluetooth-pinoilla on keinotekoiset rajat bitpool-parametrin maksimiarvolle, mikä vaikuttaa suoraan maksimibittinopeuteen. Mutta tämä ei ole suurin ongelma; melkein kaikki kuulokkeet rajoittavat myös bitpoolin enimmäisarvon 53:een.
Kuten olen jo nähnyt, useimmat laitteet toimivat täydellisesti muokatulla Bluetooth-pinolla, jonka bittinopeus on 551 kbps, ilman keskeytyksiä tai rätintää. Mutta tällainen bittinopeus ei koskaan ole tasainen normaaleissa olosuhteissa tavallisissa Bluetooth-pinoissa.

Bluetooth-pinon muokkaaminen

Kaikki A2DP-standardin kanssa yhteensopivat Bluetooth-pinot tukevat Dual Channel -tilaa, mutta sitä ei voi aktivoida käyttöliittymästä.

Lisätään käyttöliittymään kytkin! Olen tehnyt korjauksia Android 8.1:lle ja Android 9:lle, jotka lisäävät täyden Dual Channel -tuen pinoon, lisäävät tilan kehitystyökalujen tilanvaihtovalikkoon ja käsittelevät Dual Channel -yhteensopivia SBC:itä ikään kuin ne olisivat lisäkoodekkeja, kuten aptX. , AAC tai LDAC (Android kutsuu tätä HD-ääneksi) lisäämällä valintamerkki Bluetooth-laitteen asetuksiin. Tältä se näyttää:

Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

Korjaus Android 9:lle
Korjaus Android 8.1:lle

Kun valintaruutu on aktivoitu, Bluetooth-ääntä aletaan lähettää bittinopeudella 551 kbps, jos kuulokkeet tukevat 3 Mbit/s yhteysnopeutta, tai 452 kbps, jos kuulokkeet tukevat vain 2 Mbit/s.

Tämä korjaustiedosto sisältyy seuraaviin vaihtoehtoisiin laiteohjelmistoihin:

  • LineageOS
  • Ylösnousemusmuistutus
  • crDroid

Mistä 551 ja 452 kbit/s tuli?

Bluetooth-ilmanjakotekniikka on suunniteltu siirtämään tehokkaasti suuria kiinteäkokoisia paketteja. Tiedonsiirto tapahtuu aikaväleissä, eniten yhdellä siirrolla lähetettyjä paikkoja on 5. On myös siirtotiloja, joissa käytetään 1 tai 3 paikkaa, mutta ei 2 tai 4. 5 välissä voi siirtää jopa 679 tavua yhteysnopeudella 2 Mbit/s ja jopa 1021 tavua nopeudella 3 Mbit/s ja vastaavasti 3 - 367 ja 552 tavua.

Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

Jos haluamme siirtää dataa vähemmän kuin 679 tai 1021 tavua, mutta enemmän kuin 367 tai 552 tavua, siirto kestää silti 5 aikaväliä ja tiedot siirretään samassa ajassa, mikä heikentää siirron tehokkuutta.

Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

SBC Dual Channel -tilassa, 44100 Hz:n ääni ja Bitpool 38 parametria, 16 lohkoa kehystä kohden, 8 taajuusaluetta, koodaa äänen 164 tavun kehyksiksi, bittinopeudella 452 kbps.
Ääni on kapseloitava L2CAP- ja AVDTP-siirtoprotokolliin, jotka ottavat 16 tavua äänen hyötykuormasta.

Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

Siten yhteen Bluetooth-lähetykseen, jossa on 5 paikkaa, mahtuu 4 äänikehystä:

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

Sovitamme lähetettävään pakettiin 11.7 ms äänidataa, joka välitetään 3.75 ms:ssa ja paketissa on 6 käyttämätöntä tavua jäljellä.
Jos bitpoolia hieman nostetaan, 4 äänikehystä ei enää voi pakata yhteen pakettiin. Sinun on lähetettävä 3 kehystä kerrallaan, mikä heikentää lähetyksen tehokkuutta, vähentää lähetettävän äänen määrää kehystä kohti ja johtaa nopeammin äänen pätkimiseen huonoissa radio-olosuhteissa.

Samalla tavalla EDR:lle 551 Mbit/s valittiin bittinopeus 3 kbit/s: Bitpool 47:llä, 16 lohkoa kehystä kohti, 8 taajuusaluetta, kehyskoko on 200 tavua, bittinopeudella 551 kbit/s. Yksi paketti sisältää 5 kehystä tai 14.6 ms musiikkia.

Kaikkien SBC-parametrien laskenta-algoritmi on melko monimutkainen, voit helposti hämmentyä, jos lasket manuaalisesti, joten tein interaktiivisen laskimen auttamaan kiinnostuneita: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Miksi kaikkea tätä tarvitaan?

Vastoin yleistä käsitystä aptX-koodekin äänenlaadusta, joissakin tiedostoissa se voi tuottaa huonompia tuloksia kuin SBC tavallisella 328 kbps:n bittinopeudella.

SBC allokoi dynaamisesti kvantisointibitit taajuuskaistoihin matalasta korkeaan. Jos kaikki bittinopeus käytettiin matalille ja keskitaajuuksille, korkeat taajuudet "katkaistaan" (sen sijaan tulee hiljaisuus).
aptX kvantisoi taajuuskaistoja samalla bittimäärällä koko ajan, minkä vuoksi sen bittinopeus on vakio: 352 kbps 44.1 kHz:llä, 384 kbps 48 kHz:llä, eikä se voi "bittisiirtoa" niille taajuuksille, jotka niitä eniten tarvitsevat. . Toisin kuin SBC, aptX ei "leikkaa" taajuuksia, vaan lisää niihin kvantisointikohinaa vähentäen äänen dynaamista aluetta ja aiheuttaen toisinaan ominaista rätintää. SBC "syö yksityiskohtia" - hylkää hiljaisimmat alueet.
SBC 328k:aan verrattuna aptX aiheuttaa keskimäärin vähemmän vääristymiä laajan taajuusalueen musiikissa, mutta musiikissa, jolla on kapea taajuusalue ja laaja dynaaminen alue, SBC 328k voittaa joskus.

Tarkastellaanpa erikoistapausta. Pianonsoittoäänityksen spektrogrammi:
Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

Pääenergia on taajuuksilla 0 - 4 kHz ja jatkuu 10 kHz asti.
AptX:ssä pakatun tiedoston spektrogrammi näyttää tältä:
Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

Ja tältä SBC 328k näyttää.
Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

Voidaan nähdä, että SBC 328k sammutti ajoittain kokonaan yli 16 kHz:n alueen ja käytti kaiken käytettävissä olevan bittinopeuden tämän arvon alapuolella. AptX toi kuitenkin enemmän vääristymiä ihmiskorvalle kuuluvaan taajuusspektriin, kuten voidaan nähdä aptX-spektrogrammista vähennetystä alkuperäisestä spektrogrammista (mitä kirkkaampi, sitä enemmän vääristymiä):
Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

SBC 328k pilaa signaalin vähemmän alueella 0–10 kHz ja katkaisi loput:
Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

SBC:n 485 XNUMX bittinopeus riitti säilyttämään koko taajuusalueen ilman, että kaistat poistettiin käytöstä.
Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

SBC 485k on huomattavasti edellä aptX:tä tällä radalla 0-15 kHz:n alueella pienemmällä mutta silti havaittavalla erolla 15-22 kHz (mitä tummempi, sitä vähemmän vääristymiä):
Muokkaamme Bluetooth-pinoa parantaaksemme ääntä kuulokkeissa ilman AAC-, aptX- ja LDAC-koodekkeja

Alkuperäisen äänen, SBC:n ja aptX:n arkisto.

Kun vaihdat korkean bittinopeuden SBC:hen, saat äänen, joka usein päihittää aptX:n missä tahansa kuulokkeessa. Kuulokkeissa, jotka tukevat 3 Mbps EDR-yhteyttä, 551 kbps:n bittinopeus tuottaa aptX HD:hen verrattavan äänen.

Voitko tehdä vielä enemmän?

Android-korjaus sisältää myös mahdollisuuden kasvattaa edelleen 2 Mbps EDR-laitteiden bittinopeutta. Voit nostaa bittinopeutta 452 kbit/s:sta 595 kbit/s hintaan, mikä heikentää lähetyksen vakautta vaikeissa radio-olosuhteissa.
Riittää, kun asetat persist.bluetooth.sbc_hd_higher_bitrate-muuttujan arvoon 1:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Äärimmäinen bittinopeuskorjaus on toistaiseksi otettu käyttöön vain LineageOS 15.1:ssä, mutta ei 16.0:ssa.

Laitteen yhteensopivuus

SBC Dual Channel -toimintoa tukevat lähes kaikki kuulokkeet, kaiuttimet ja auton pääyksiköt. Tämä ei ole ihme - standardi vaatii sen tuen kaikissa dekoodauslaitteissa. Pienessä määrässä laitteita tämä tila aiheuttaa ongelmia, mutta nämä ovat yksittäisiä tapauksia.
Lisätietoja yhteensopivista laitteista löytyy osoitteesta 4pda tai XDA-developers.

Äänierojen vertailu

Tein verkkopalvelun, joka koodaa äänen SBC:hen (sekä aptX ja aptX HD) reaaliajassa, suoraan selaimessa. Sen avulla voit verrata eri SBC-profiilien ja muiden koodekkien ääntä langallisilla kuulokkeilla, kaiuttimilla ja suosikkimusiikkiasi välittämättä ääntä Bluetoothin kautta, ja myös muuttaa koodausparametreja suoraan ääntä toistaessasi.
btcodecs.valdikss.org.ru/sbc-encoder

Ota yhteyttä Android-kehittäjiin

Kirjoitin monille Googlen Bluetooth-pinon kehittäjille ja pyysin heitä harkitsemaan korjaustiedostojen lisäämistä Androidin päähaaraan - AOSP:hen, mutta en saanut yhtäkään vastausta. Laastarini sisään Gerrit-korjausjärjestelmä Androidille jäi myös ilman kommentteja keneltäkään asiaan liittyvältä.
Olisin iloinen, jos saisin apua yhteydenotossa Googlen kehittäjiin ja SBC HD:n tuomiseen Androidiin. Gerritin korjaustiedosto on jo vanhentunut (tämä on yksi varhaisista versioista), ja päivitän sen, jos kehittäjät ovat kiinnostuneita muutoksistani (sen päivittäminen ei ole helppoa, minulla ei ole Android Q:n kanssa yhteensopivia laitteita ).

Johtopäätös

LineageOS-, Resurrection Remix- ja crDroid-laiteohjelmistolla varustettujen älypuhelimien käyttäjät voivat nauttia paremmasta äänenlaadusta juuri nyt, aktivoi vain vaihtoehto Bluetooth-laitteen asetuksista. Linux-käyttäjät voivat myös saada lisää SBC-bittinopeutta asentamalla korjaustiedosto Pali Roharilta, joka muun muassa lisää tuen aptX-, aptX HD- ja FastStream-koodekeille.

Lähde: will.com

Lisää kommentti