Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

Ier Dir dësen Artikel liest, ass et recommandéiert de fréieren Artikel ze liesen: Audio iwwer Bluetooth: maximal Detailer iwwer Profiler, Codecs an Apparater

E puer drahtlose Kopfhörer Benotzer berichten schlecht Tounqualitéit a Mangel u héije Frequenzen wann Dir de Standard SBC Bluetooth Codec benotzt, deen vun all Audiogeräter ënnerstëtzt gëtt. Eng gemeinsam Empfehlung fir den Toun ze verbesseren ass Apparater an Kopfhörer ze kafen déi aptX an LDAC Codecs ënnerstëtzen. Dës Codecs erfuerderen Lizenzgebühren, sou datt Apparater déi se ënnerstëtzen méi deier sinn.

Et stellt sech eraus datt d'niddereg Qualitéit vu SBC wéinst kënschtlechen Aschränkungen vu Bluetooth-Stacken an Kopfhörer-Astellungen ass, an dës Begrenzung kann op all existent Apparater duerch Softwareännerungen op e Smartphone oder Computer ëmgoen.

Codec SBC

De SBC Codec huet vill verschidde Parameteren, déi während der Verbindungssetupphase ausgehandelt ginn. Ënnert hinnen:

  • Zuel an Typ vun Channels: Joint Stereo, Stereo, Dual Channel, Mono;
  • Zuel vun Frequenz Bands: 4 oder 8;
  • Zuel vu Blöcke am Package: 4, 8, 12, 16;
  • Algorithmus fir Bits während der Quantiséierung ze verdeelen: Loudness, SNR;
  • De Maximum a Minimum Wäert vum Pool vu Bits, déi während der Quantiséierung benotzt ginn (Bitpool): normalerweis vun 2 bis 53.

Den Dekodéierungsapparat muss all Kombinatioun vun dëse Parameteren ënnerstëtzen. Den Encoder kann net alles ëmsetzen.
Bestehend Bluetooth Stack averstanen normalerweis op de folgende Profil: Joint Stereo, 8 Bands, 16 Blocks, Loudness, Bitpool 2..53. Dëse Profil codéiert 44.1 kHz Audio mat enger Bitrate vun 328 kbps.
De Bitpool-Parameter beaflosst direkt de Bitrate bannent engem Profil: wat méi héich ass, wat méi héich ass de Bitrate, an dofir d'Qualitéit.
Allerdéngs ass de Bitpool-Parameter net un engem spezifesche Profil gebonnen; De Bitrate gëtt och gréisstendeels vun anere Parameteren beaflosst: Aart vu Kanäl, Zuel vun de Frequenzbanden, Zuel vu Blocken. Dir kënnt de Bitrate indirekt erhéijen, andeems Dir op Net-Standard Profiler averstane sidd, ouni de Bitpool z'änneren.

Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

Formel fir Berechnung SBC bitrate

Zum Beispill, encoder Dual Channel Modus Channels getrennt, benotzt de ganze Bitpool fir all Kanal. Andeems Dir den Apparat forcéiere fir Dual Channel amplaz Joint Stereo ze benotzen, kréie mir bal duebel de Bitrate mam selwechte maximale Bitpoolwäert: 617 kbps.
Menger Meenung no, ass d'Benotzung vun engem Bitpool Wäert net un engem Profil an der Verhandlungsstadium gebonnen e Feeler am A2DP Standard, wat zu enger kënschtlecher Begrenzung vun der SBC Qualitéit gefouert huet. Et wier méi Sënn fir Bitrate ze verhandelen anstatt Bitpool.

Dës fixe Bitpool- a Bitrate Wäerter stamen aus engem Dësch mat empfohlene Wäerter fir ze benotzen fir héichqualitativ Audio. Awer eng Empfehlung ass kee Grond fir Iech op dës Wäerter ze limitéieren.

Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

D'A2DP v1.2 Spezifizéierung, déi vun 2007 bis 2015 aktiv war, erfuerdert datt all Dekodéierungsgeräter korrekt funktionnéieren mat Bitrates bis zu 512 kbps:

Den Decoder vum SNK soll all méiglech Bitpool Wäerter ënnerstëtzen, déi net iwwer de maximalen Bitrate féieren. Dëse Profil limitéiert déi verfügbar maximal Bitrate op 320kb/s fir Mono, an 512kb/s fir zwee-Kanal Modi.

An der neier Versioun vun der Spezifizéierung gëtt et keng Limit op de Bitrate. Et gëtt geschat datt modern Kopfhörer, déi no 2015 verëffentlecht ginn, déi EDR ënnerstëtzen, Bitraten bis ≈730 kbps ënnerstëtzen.

Aus e puer Grënn hunn d'Linux (PulseAudio), Android, Blackberry a macOS Bluetooth-Stacken, déi ech getest hunn, kënschtlech Limiten op de maximale Wäert vum Bitpool-Parameter, wat direkt de maximalen Bitrate beaflosst. Awer dëst ass net de gréisste Problem; bal all Kopfhörer limitéieren och de maximale Bitpoolwäert op 53.
Wéi ech scho gesinn hunn, funktionnéieren déi meescht Apparater perfekt op engem modifizéierten Bluetooth-Stack mat engem Bitrate vu 551 kbps, ouni Ënnerbriechungen oder Crackles. Awer sou e Bitrate wäert ni konsequent sinn ënner normale Konditiounen, op normale Bluetooth-Stacken.

Änneren de Bluetooth Stack

All Bluetooth-Stack dee mat dem A2DP Standard kompatibel ass huet Ënnerstëtzung fir Dual Channel Modus, awer et ass net méiglech et aus der Interface z'aktivéieren.

Loosst eis e Toggle op d'Interface addéieren! Ech hunn Patches fir Android 8.1 an Android 9 gemaach, déi voll Dual Channel Support zum Stack addéieren, e Modus an de Modus Toggle Menu an den Dev Tools addéieren, a behandelen Dual Channel-aktivéiert SBCs wéi wa se en zousätzleche Codec wéi aptX wieren , AAC oder LDAC (Android nennt dësen HD Audio) andeems Dir e Scheckzeechen un d'Bluetooth Apparat Astellunge bäidréit. Dëst ass wéi et ausgesäit:

Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

Patch fir Android 9
Patch fir Android 8.1

Wann d'Checkbox aktivéiert ass, fänkt Bluetooth Audio mat engem Bitrate iwwerdroen ze ginn 551 kbps, wann d'Kopfhörer eng Verbindungsgeschwindegkeet vun 3 Mbit/s ënnerstëtzen, oder 452 kbps, wann d'Kopfhörer nëmmen 2 Mbit/s ënnerstëtzen.

Dëse Patch ass an de folgenden alternativen Firmware abegraff:

  • LineageOS
  • Operstéiungs Remix
  • crDroid

Wou koumen 551 an 452 kbit/s hier?

Bluetooth Air-Sharing Technologie ass entwéckelt fir effizient grouss fixe Gréisst Päck ze vermëttelen. Donnéeën Transfert geschitt an Plaze , déi gréisst Zuel vun Plaze an engem Transfert geschéckt ass 5. Et ginn och Transfermaart Modi datt benotzen 1 oder 3 Plaze , awer net 2 oder 4. An 5 Plaze Dir kënnt Transfert bis zu 679 Bytes mat enger Verbindung Vitesse. vun 2 Mbit/s a bis zu 1021 Bytes mat enger Geschwindegkeet vun 3 Mbit/s, respektiv mat 3 - 367 an 552 Bytes.

Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

Wa mir manner Daten wéi 679 oder 1021 Bytes transferéiere wëllen, awer méi wéi 367 oder 552 Bytes, wäert den Transfer nach ëmmer 5 Slots huelen an d'Donnéeë ginn an der selwechter Zäit transferéiert, wat d'Transfereffizienz reduzéiert.

Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

SBC am Dual Channel Modus, bei 44100 Hz Audio mat Bitpool 38 Parameteren, 16 Blocks pro Frame, 8 Frequenzbereich, codéiert Audio an 164 Byte Frames, mat engem Bitrate vu 452 kbps.
Audio muss a L2CAP- an AVDTP-Transferprotokoller verschlësselt ginn, déi 16 Bytes vun der Audio Notzlaascht huelen.

Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

Also, eng Bluetooth Iwwerdroung mat 5 Slots kann 4 Audioframes aménagéieren:

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

Mir passen 11.7 ms Audiodaten an de Paket, dee geschéckt gëtt, deen an 3.75 ms iwwerdroe gëtt, a mir hunn 6 onbenotzt Bytes am Paket.
Wann Dir de Bitpool e bësse erhéicht, ass et net méi méiglech 4 Audioframes an ee Package ze packen. Dir musst 3 Frames gläichzäiteg schécken, wat d'Iwwerdroungseffizienz reduzéiert, d'Quantitéit vum Audio pro Frame iwwerdroen reduzéiert a méi séier zu Audiostutter an aarme Radiobedéngungen féiert.

Am selwechte Wee gouf e Bitrate vun 551 kbit / s fir EDR 3 Mbit / s ausgewielt: mat Bitpool 47, 16 Blocks pro Frame, 8 Frequenzbereich, ass d'Framegréisst 200 Bytes, mat engem Bitrate vun 551 kbit / s. Ee Package enthält 5 Rummen oder 14.6 ms Musek.

Den Algorithmus fir all SBC Parameteren ze berechnen ass zimmlech komplex, Dir kënnt ganz einfach duerchernee ginn wann Dir manuell zielt, also hunn ech en interaktive Rechner gemaach fir déi interesséiert ze hëllefen: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Firwat ass dat alles néideg?

Am Géigesaz zum populäre Glawen iwwer d'Tounqualitéit vum aptX Codec, op e puer Dateien kann et Resultater méi schlëmm produzéieren wéi SBC mat engem Standard Bitrate vun 328 kbps.

De SBC allokéiert dynamesch Quantiséierungsbits op Frequenzbänner op enger niddereg-bis-héich Basis. Wann all Bitrate fir déi niddreg a mëttler Frequenzen benotzt gouf, ginn déi héich Frequenzen "ofgeschnidden" (et gëtt roueg amplaz).
aptX quantizes Frequenzbands mat der selwechter Unzuel vu Bits déi ganzen Zäit, dofir huet et e konstante Bitrate: 352 kbps fir 44.1 kHz, 384 kbps fir 48 kHz, an et kann net "bit-shift" op déi Frequenzen déi se am meeschte brauchen . Am Géigesaz zu SBC wäert aptX d'Frequenzen net "schneide", awer e Quantiséierungsrauschen derbäi addéieren, déi dynamesch Gamme vum Audio reduzéieren, an heiansdo charakteristesch Crackling aféieren. SBC "ësst Detailer" - verwerft déi rouegste Beräicher.
Am Duerchschnëtt, am Verglach zum SBC 328k, féiert aptX manner Verzerrung a Musek mat engem breet Frequenzbereich, awer a Musek mat engem schmuele Frequenzbereich an engem breet dynamesche Beräich, gewënnt de SBC 328k heiansdo.

Loosst eis e spezielle Fall betruechten. Spektrogramm vun enger Piano-Spillopnam:
Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

D'Haaptenergie läit an Frequenzen vun 0 bis 4 kHz, a geet weider bis 10 kHz.
De Spektrogramm vun enger Datei kompriméiert an aptX gesäit esou aus:
Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

An dat ass wéi de SBC 328k ausgesäit.
Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

Et kann gesi ginn datt de SBC 328k periodesch de Beräich iwwer 16 kHz komplett ausgeschalt huet an all verfügbare Bitrate op Beräicher ënner dësem Wäert verbruecht huet. Wéi och ëmmer, aptX huet méi Verzerrung an de Frequenzspektrum agefouert, dat dem mënschlechen Ouer hörbar ass, wéi et am subtrahéierten originelle Spektrogramm vum aptX Spektrogramm gesi ka ginn (wat méi hell, wat méi Verzerrung):
Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

Wärend de SBC 328k d'Signal manner am Beräich vun 0 bis 10 kHz verwinnt, an de Rescht ofgeschnidden:
Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

De 485k Bitrate vum SBC war genuch fir de ganze Frequenzbereich ze erhaalen, ouni Bands auszeschalten.
Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

De SBC 485k ass wesentlech virun aptX op dëser Streck am 0-15 kHz Beräich, mat engem méi klengen awer nach merkbare Ënnerscheed vun 15-22 kHz (wat méi däischter, wat manner Verzerrung):
Mir änneren de Bluetooth Stack fir den Toun op Kopfhörer ouni AAC, aptX an LDAC Codecs ze verbesseren

Archiv vun original Audio, SBC an aptX.

Andeems Dir op en High-Bitrate SBC wiesselt, kritt Dir Audio déi dacks aptX op all Kopfhörer schloen. Op Kopfhörer déi 3 Mbps EDR Konnektivitéit ënnerstëtzen, produzéiert e Bitrate vu 551 kbps Toun vergläichbar mat aptX HD.

Kënnt Dir nach méi maachen?

Den Android Patch enthält och eng Optioun fir de Bitrate fir 2 Mbps EDR Apparater weider ze erhéijen. Dir kënnt de Bitrate vun 452 kbit / s op 595 kbit / s erhéijen, op d'Käschte fir d'Transmissiounsstabilitéit a schwieregen Radiobedéngungen ze reduzéieren.
Et ass genuch fir d'Persist.bluetooth.sbc_hd_higher_bitrate Variabel op 1 ze setzen:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Den extremen Bitrate Patch ass bis elo nëmmen an LineageOS 15.1 ugeholl ginn, awer net am 16.0.

Gerät Kompatibilitéit

SBC Dual Channel gëtt ënnerstëtzt vu bal all Kopfhörer, Spriecher an Auto Kapp Eenheeten. Dëst ass kee Wonner - de Standard erfuerdert seng Ënnerstëtzung an all Dekodéierungsapparater. Et ginn eng kleng Unzuel vun Apparater op deenen dëse Modus Problemer verursaacht, awer dëst sinn isoléiert Fäll.
Méi Detailer iwwer kompatibel Geräter fannt Dir op W4bsitXNUMX-dns.com oder xda-Entwéckler.

Verglach vun Toun Differenzen

Ech hunn e Webservice gemaach deen Audio op SBC (souwéi aptX an aptX HD) an Echtzäit codéiert, direkt am Browser. Mat et kënnt Dir den Toun vu verschiddene SBC Profiler an aner Codecs vergläichen, ouni tatsächlech Audio iwwer Bluetooth ze vermëttelen, op all kabellos Kopfhörer, Spriecher, an Är Liiblingsmusek, an och Kodéierungsparameter direkt änneren beim Audio spillen.
btcodecs.valdikss.org.ru/sbc-encoder

Kontakt Android Entwéckler

Ech hunn u vill Bluetooth-Stack-Entwéckler bei Google geschriwwen a gefrot fir ze betruechten Patches an der Haapt Android Branche ze enthalen - AOSP, awer krut keng eenzeg Äntwert. Meng Patches an Gerrit Patch System fir Android blouf och ouni Kommentar vu jidderengem involvéierten.
Ech wier frou wann ech e bëssen Hëllef kréien fir mat den Entwéckler bei Google a Kontakt ze kommen an SBC HD op Android ze bréngen. De Patch am Gerrit ass scho verännert (dëst ass eng vun de fréie Versiounen), an ech wäert et aktualiséieren wann d'Entwéckler un meng Ännerungen interesséiert sinn (et ass net einfach fir mech et ze aktualiséieren, ech hunn keng Apparater kompatibel mat Android Q ).

Konklusioun

D'Benotzer vu Smartphones mat LineageOS, Resurrection Remix a crDroid Firmware kënnen elo verbessert Tounqualitéit genéissen, aktivéiert just d'Optioun an de Bluetooth Apparat Astellungen. Linux Benotzer kënnen och erhéicht SBC Bitrate kréien andeems se installéiert sinn Patch vum Pali Rohar, déi ënner anerem Ënnerstëtzung fir aptX, aptX HD a FastStream Codecs bäidréit.

Source: will.com

Setzt e Commentaire