Foardat jo dit artikel lêze, is it oan te rieden dat jo it foarige artikel lêze:
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.
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.
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, de Bluetooth-stapels dy't ik testen haw Linux (PulseAudio), Android, Braambes en macOS Der binne keunstmjittige grinzen oan de maksimale bitpoolwearde, dy't direkt ynfloed hawwe op de maksimale bitrate. 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 tafoeget oan 'e stack, de modus tafoeget oan it moduswikselmenu yn 'e ûntwikkelderstools, en Dual Channel-ynskeakele SBC behannelet as wie it in ekstra codec lykas aptX, AAC of LDAC (Android (neamt it HD Audio) troch in seleksjefakje ta te foegjen oan de ynstellings fan jo Bluetooth-apparaat. Hjir is hoe't it derút sjocht:
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.
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.
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.
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:
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:
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:
En dit is wat SBC 328k liket.
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):
Wylst de SBC 328k it sinjaal minder bedoarn yn it berik fan 0 oant 10 kHz, en de rest ôfsnien:
De 485k bitrate fan 'e SBC wie genôch om it heule frekwinsjeberik te behâlden, sûnder bands út te skeakeljen.
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):
.
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?
Yn 'e patch foar Android Der is ek in opsje om de bitrate fierder te ferheegjen foar 2 Mbps EDR-apparaten. De bitrate kin ferhege wurde fan 452 kbps nei 595 kbps, ten koste fan fermindere oerdrachtstabiliteit yn útdaagjende 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 of .
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.
Kontakt Untwikkelders Android
Ik haw oan in protte Bluetooth-stack-ûntwikkelders by Google skreaun en har frege om patches yn 'e haadtûke op te nimmen. Android — AOSP, mar ik haw gjin inkele reaksje krigen. Myn patches binne binnen bleau ek sûnder kommentaar fan immen belutsen.
Ik soe bliid wêze as jo my helpe koene by it kontakt opnimmen mei de ûntwikkelders fan Google en it ymplementearjen fan SBC HD yn AndroidDe patch yn gerrit is al ferâldere (it is ien fan 'e earste revisjes), en ik sil it bywurkje as de ûntwikkelders ynteressearre binne yn myn feroarings (it is net maklik foar my om it by te wurkjen, ik haw gjin kompatible mei Android Q-apparaten).
konklúzje
Brûkers fan smartphones mei LineageOS, Resurrection Remix, en crDroid-firmware kinne no direkt genietsje fan ferbettere lûdskwaliteit troch gewoan de opsje te aktivearjen yn 'e Bluetooth-apparaatynstellingen. Linux kinne ek ferhege SBC-bitrate krije troch te ynstallearjen , dy't ûnder oare stipe tafoeget foar aptX, aptX HD en FastStream codecs.
Boarne: www.habr.com
