Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

Foardat jo dit artikel lêze, is it oan te rieden dat jo it foarige artikel lêze: Audio fia Bluetooth: maksimale details oer profilen, codecs en apparaten

Guon brûkers fan draadloze koptelefoanen melde minne lûdskwaliteit en gebrek oan hege frekwinsjes by it brûken fan de standert SBC Bluetooth-codec, dy't wurdt stipe troch alle audio-apparaten. In mienskiplike oanbefelling foar it ferbetterjen fan lûd is om apparaten en koptelefoanen te keapjen dy't aptX- en LDAC-codecs stypje. Dizze codecs fereaskje lisinsjekosten, dus apparaten dy't har stypje binne djoerder.

It docht bliken dat de lege kwaliteit fan SBC te tankjen is oan keunstmjittige beheiningen fan Bluetooth-stacks en koptelefoanynstellingen, en dizze beheining kin op alle besteande apparaten wurde omjûn troch softwarewizigingen oan in smartphone of kompjûter.

Codec SBC

De SBC-codec hat in protte ferskillende parameters dy't ûnderhannele wurde yn 'e ferbiningsynstellingsfaze. Under harren:

  • Oantal en type kanalen: Joint Stereo, Stereo, Dual Channel, Mono;
  • Oantal frekwinsje bands: 4 of 8;
  • Oantal blokken yn it pakket: 4, 8, 12, 16;
  • Algoritme foar it fersprieden fan bits by kwantisaasje: Loudness, SNR;
  • De maksimale en minimale wearde fan 'e pool fan bits brûkt by kwantisaasje (bitpool): meastentiids fan 2 oant 53.

It dekodearingsapparaat moat elke kombinaasje fan dizze parameters stypje. De encoder kin net alles ymplementearje.
Besteande Bluetooth-stacks binne it typysk iens oer it folgjende profyl: Joint Stereo, 8 bands, 16 blokken, Loudness, bitpool 2..53. Dit profyl kodearret 44.1 kHz audio mei in bitrate fan 328 kbps.
De parameter bitpool hat direkt ynfloed op de bitrate binnen ien profyl: hoe heger it is, hoe heger de bitrate, en dus de kwaliteit.
De parameter bitpool is lykwols net bûn oan in spesifyk profyl; De bitrate wurdt ek foar in grut part beynfloede troch oare parameters: type kanalen, oantal frekwinsje bands, oantal blokken. Jo kinne de bitrate yndirekt ferheegje, troch oerienkomst oer net-standert profilen, sûnder de bitpool te feroarjen.

Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

Formule foar it berekkenjen fan SBC bitrate

Bygelyks, Dual Channel modus kodearret kanalen apart, mei help fan de hiele bitpool foar elk kanaal. Troch it apparaat te twingen om Dual Channel te brûken ynstee fan Joint Stereo, krije wy hast dûbel de bitrate mei deselde maksimale bitpoolwearde: 617 kbps.
Yn myn miening, it brûken fan in bitpool wearde net bûn oan in profyl op de ûnderhannelings poadium is in flater yn de A2DP standert, dy't late ta in keunstmjittige beheining fan SBC kwaliteit. It soe mear sin meitsje om bitrate te ûnderhanneljen ynstee fan bitpool.

Dizze fêste Bitpool- en Bitrate-wearden komme út in tabel mei oanrikkemandearre wearden foar gebrûk foar audio fan hege kwaliteit. Mar in oanbefelling is gjin reden om josels te beheinen ta dizze wearden.

Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

De A2DP v1.2-spesifikaasje, dy't aktyf wie fan 2007 oant 2015, fereasket dat alle dekodearjende apparaten goed wurkje mei bitrates oant 512 kbps:

De decoder fan 'e SNK sil alle mooglike bitpool-wearden stypje dy't net resultearje yn mear dan de maksimale bitrate. Dit profyl beheint de beskikbere maksimale bitrate ta 320kb/s foar mono, en 512kb/s foar twa-kanaals modus.

Yn 'e nije ferzje fan' e spesifikaasje is d'r gjin limyt op 'e bitrate. It wurdt rûsd dat moderne koptelefoanen útbrocht nei 2015 dy't EDR stypje kinne bitraten stypje oant ≈730 kbps.

Om ien of oare reden hawwe de Linux (PulseAudio), Android, Blackberry en macOS Bluetooth-stacks dy't ik hifke, keunstmjittige limiten op 'e maksimale wearde fan' e bitpoolparameter, dy't direkt de maksimale bitrate beynfloedet. Mar dit is net it grutste probleem; hast alle koptelefoanen beheine ek de maksimale bitpoolwearde ta 53.
Lykas ik al sjoen haw, wurkje de measte apparaten perfekt op in wizige Bluetooth-stapel mei in bitrate fan 551 kbps, sûnder ûnderbrekkings of crackles. Mar sa'n bitrate sil nea konsekwint wêze ûnder normale omstannichheden, op reguliere Bluetooth-stacks.

It wizigjen fan de Bluetooth-stapel

Elke Bluetooth-stapel dy't kompatibel is mei de A2DP-standert hat stipe foar Dual Channel-modus, mar it is net mooglik om it te aktivearjen fan 'e ynterface.

Litte wy in skeakel tafoegje oan 'e ynterface! Ik haw patches makke foar Android 8.1 en Android 9 dy't folsleine Dual Channel-stipe tafoegje oan 'e stapel, in modus taheakje oan it wikselmenu foar modus yn' e dev-ark, en behannelje Dual Channel-ynskeakele SBC's as wiene se in ekstra codec lykas aptX , AAC, of ​​LDAC (Android neamt dit HD Audio) troch in karmerk ta te foegjen oan de Bluetooth-apparaatynstellingen. Dit is hoe't it derút sjocht:

Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

Patch foar Android 9
Patch foar Android 8.1

As it karfakje is aktivearre, begjint Bluetooth-audio te ferstjoeren mei in bitrate 551 kbps, as de koptelefoan in ferbiningssnelheid fan 3 Mbit/s stypje, of 452 kbps, as de koptelefoan allinnich stipet 2 Mbit / s.

Dizze patch is opnommen yn 'e folgjende alternative firmware:

  • LineageOS
  • Resurrection Remix
  • crDroid

Wêr kamen 551 en 452 kbit/s wei?

Bluetooth-technology foar dielen fan loft is ûntworpen om grutte pakketten mei fêste grutte effisjint te ferstjoeren. Data oerdracht komt foar yn slots , it grutste oantal slots ferstjoerd yn ien oerdracht is 5. Der binne ek oerdracht modes dy't brûke 1 of 3 slots , mar net 2 of 4. Yn 5 slots kinne jo oermeitsje oant 679 bytes op in ferbining snelheid fan 2 Mbit/s en oant 1021 bytes mei in snelheid fan 3 Mbit/s, en op respektivelik 3 - 367 en 552 bytes.

Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

As wy wolle oerdrage minder gegevens as 679 of 1021 bytes, mar mear as 367 of 552 bytes, de oerdracht sil noch nimme 5 slots en de gegevens wurde oerdroegen yn deselde tiid, dat ferleget de oerdracht effisjinsje.

Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

SBC yn Dual Channel modus, by 44100 Hz audio mei Bitpool 38 parameters, 16 blokken per frame, 8 frekwinsje berik, kodearret audio yn 164 byte frames, mei in bitrate fan 452 kbps.
De audio moat wurde ynkapsele yn L2CAP- en AVDTP-oerdrachtprotokollen, dy't 16 bytes nimme fan 'e audio-lading.

Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

Sa kin ien Bluetooth-oerdracht mei 5 slots 4 audioframes passe:

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

Wy passe 11.7 ms oan audiogegevens yn it pakket dat ferstjoerd wurdt, dat wurdt oerbrocht yn 3.75 ms, en wy hawwe 6 net brûkte bytes yn it pakket.
As jo ​​de bitpool in bytsje ferheegje, sil it net mear mooglik wêze om 4 audioframes yn ien pakket te pakken. Jo sille moatte stjoere 3 frames tagelyk, dat ferleget transmissie effisjinsje, ferminderet de hoemannichte audio oerbrocht per frame, en sil flugger liede ta audio stotterjen yn minne radio omstannichheden.

Op deselde wize waard in bitrate fan 551 kbit / s selektearre foar EDR 3 Mbit / s: mei Bitpool 47, 16 blokken per frame, 8 frekwinsjebereiken, is de framegrutte 200 bytes, mei in bitrate fan 551 kbit / s. Ien pakket befettet 5 frames of 14.6 ms muzyk.

It algoritme foar it berekkenjen fan alle SBC-parameters is frij kompleks, jo kinne maklik betize wurde as jo mei de hân telle, dus ik makke in ynteraktive rekkenmasine om belangstellenden te helpen: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Wêrom is dit alles nedich?

Yn tsjinstelling ta populêr leauwen oer de lûdskwaliteit fan 'e aptX-codec, kin it op guon bestannen minder resultaten produsearje dan SBC mei in standert bitrate fan 328 kbps.

De SBC allocates dynamysk kwantisaasjebits oan frekwinsjebanden op in leech oant hege basis. As alle bitrate waard brûkt foar de leech- en midfrekwinsjes, wurde de hege frekwinsjes "ôfsnien" (d'r sil ynstee stilte wêze).
aptX quantizes frekwinsje bands mei itselde oantal bits de hiele tiid, dat is wêrom it hat in konstante bitrate: 352 kbps foar 44.1 kHz, 384 kbps foar 48 kHz, en it kin net "bit-shift" nei dy frekwinsjes dy't se meast nedich hawwe . Oars as SBC sil aptX frekwinsjes net "snije", mar sil kwantisaasjelûd oan har tafoegje, it dynamyske berik fan 'e audio ferminderje, en soms karakteristike crackling yntrodusearje. SBC "eat details" - smyt de stilste gebieten.
Yn trochsneed, yn ferliking mei de SBC 328k, yntrodusearret aptX minder ferfoarming yn muzyk mei in breed frekwinsjeberik, mar yn muzyk mei in smel frekwinsjeberik en in breed dynamysk berik wint de SBC 328k soms.

Lit ús beskôgje in spesjaal gefal. Spektrogram fan in piano-spieljende opname:
Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

De wichtichste enerzjy leit yn frekwinsjes fan 0 oant 4 kHz, en bliuwt oant 10 kHz.
It spektrogram fan in bestân komprimearre yn aptX sjocht der sa út:
Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

En dit is wat SBC 328k liket.
Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

It kin sjoen wurde dat de SBC 328k it berik boppe 16 kHz periodyk folslein útskeakele en alle beskikbere bitrate bestege oan berikten ûnder dizze wearde. aptX yntrodusearre lykwols mear ferfoarming yn it frekwinsjespektrum dat te hearren wie foar it minsklik ear, lykas te sjen is yn it subtrahearre orizjinele spektrogram fan it aptX-spektrogram (hoe helderder, hoe mear ferfoarming):
Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

Wylst de SBC 328k it sinjaal minder bedoarn yn it berik fan 0 oant 10 kHz, en de rest ôfsnien:
Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

De 485k bitrate fan 'e SBC wie genôch om it heule frekwinsjeberik te behâlden, sûnder bands út te skeakeljen.
Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

SBC 485k is signifikant foarút fan aptX op dit spoar yn it berik fan 0-15 kHz, en mei in lytser, mar noch merkber ferskil - yn 15-22 kHz (hoe tsjusterder, hoe minder ferfoarming):
Wy feroarje de Bluetooth-stapel om it lûd op koptelefoanen te ferbetterjen sûnder AAC, aptX en LDAC codecs

Argyf fan orizjinele audio, SBC en aptX.

Troch te wikseljen nei in SBC mei hege bitrate, krije jo audio dy't faaks aptX op elke koptelefoan slacht. Op koptelefoanen dy't 3 Mbps EDR-ferbining stypje, produseart in bitrate fan 551 kbps lûd fergelykber mei aptX HD.

Kinne jo noch mear?

De Android-patch omfettet ek in opsje om de bitrate foar 2 Mbps EDR-apparaten fierder te ferheegjen. Jo kinne de bitrate ferheegje fan 452 kbit / s nei 595 kbit / s, op kosten fan it ferminderjen fan oerdrachtstabiliteit yn drege radioomstannichheden.
It is genôch om de fariabele persist.bluetooth.sbc_hd_higher_bitrate op 1 yn te stellen:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

De patch foar ekstreme bitrate is oant no ta allinich oannommen yn LineageOS 15.1, mar net yn 16.0.

Kompatibiliteit fan apparaat

SBC Dual Channel wurdt stipe troch hast alle koptelefoan, sprekkers en auto head units. Dit is gjin wûnder - de standert fereasket syn stipe yn alle dekodearjen apparaten. D'r binne in lyts oantal apparaten wêrop dizze modus problemen feroarsaket, mar dit binne isolearre gefallen.
Mear details oer kompatibele apparaten kinne fûn wurde op W4bsitXNUMX-dns.com of xda-ûntwikkelders.

Fergeliking fan lûdferskillen

Ik makke in webtsjinst dy't audio kodearret nei SBC (lykas aptX en aptX HD) yn echte tiid, direkt yn 'e browser. Dêrmei kinne jo it lûd fan ferskate SBC-profilen en oare codecs fergelykje, sûnder feitlik audio fia Bluetooth te ferstjoeren, op elke bedrade koptelefoan, sprekkers en jo favorite muzyk, en ek de kodearringparameters direkt feroarje by it spieljen fan audio.
btcodecs.valdikss.org.ru/sbc-encoder

Nim kontakt op mei Android-ûntwikkelders

Ik skreau oan in protte Bluetooth-stack-ûntwikkelders by Google en frege har om te beskôgje it opnimmen fan patches yn 'e wichtichste Android-tûke - AOSP, mar krige gjin inkeld antwurd. Myn patches yn Gerrit patchsysteem foar Android bleau ek sûnder kommentaar fan immen belutsen.
Ik soe bliid wêze as ik wat help koe krije by it yn kontakt komme mei de ûntwikkelders by Google en SBC HD nei Android te bringen. De patch yn gerrit is al ferâldere (dit is ien fan 'e iere ferzjes), en ik sil it bywurkje as de ûntwikkelders ynteressearre binne yn myn wizigingen (it is net maklik foar my om it te aktualisearjen, ik haw gjin apparaten kompatibel mei Android Q ).

konklúzje

Brûkers fan smartphones mei LineageOS, Resurrection Remix en crDroid-firmware kinne no genietsje fan ferbettere lûdskwaliteit, aktivearje gewoan de opsje yn 'e Bluetooth-apparaatynstellingen. Linux-brûkers kinne ek ferhege SBC-bitrate krije troch te ynstallearjen patch fan Pali Rohar, dy't ûnder oare stipe tafoeget foar aptX, aptX HD en FastStream codecs.

Boarne: www.habr.com

Add a comment