Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Sa dili pa basahon kini nga artikulo, girekomenda nga basahon nimo ang miaging artikulo: Audio pinaagi sa Bluetooth: kutob sa mahimo nga detalye bahin sa mga profile, codec ug mga aparato

Ang ubang mga tiggamit sa wireless headphone nagreport sa dili maayo nga kalidad sa tunog ug kakulang sa taas nga mga frequency kung gigamit ang standard nga SBC Bluetooth codec, nga gisuportahan sa tanan nga mga aparato sa audio. Usa ka sagad nga rekomendasyon alang sa pagpaayo sa tunog mao ang pagpalit sa mga aparato ug headphone nga nagsuporta sa aptX ug LDAC codec. Kini nga mga codec nanginahanglan mga bayad sa paglilisensya, busa ang mga aparato nga nagsuporta kanila mas mahal.

Kini nahimo nga ang ubos nga kalidad sa SBC tungod sa artipisyal nga mga limitasyon sa Bluetooth stacks ug mga setting sa headphone, ug kini nga limitasyon mahimong laktawan sa bisan unsang kasamtangan nga mga himan pinaagi sa mga pagbag-o sa software sa usa ka smartphone o computer.

Codec SBC

Ang SBC codec adunay daghang lain-laing mga parameter nga nakigsabot sa panahon sa koneksyon setup hugna. Lakip kanila:

  • Gidaghanon ug tipo sa mga channel: Joint Stereo, Stereo, Dual Channel, Mono;
  • Gidaghanon sa frequency bands: 4 o 8;
  • Gidaghanon sa mga bloke sa pakete: 4, 8, 12, 16;
  • Algorithm alang sa pag-apod-apod sa mga bit sa panahon sa quantization: Loudness, SNR;
  • Ang maximum ug minimum nga bili sa pool sa mga bits nga gigamit sa quantization (bitpool): kasagaran gikan sa 2 ngadto sa 53.

Ang decoding device kinahanglang mosuporta sa bisan unsang kombinasyon niini nga mga parameter. Mahimong dili ipatuman sa encoder ang tanan.
Ang naglungtad nga Bluetooth stack kasagarang magkauyon sa mosunod nga profile: Joint Stereo, 8 bands, 16 blocks, Loudness, bitpool 2..53. Kini nga profile nag-encode sa 44.1 kHz audio sa bitrate nga 328 kbps.
Ang bitpool parameter direktang makaapekto sa bitrate sulod sa usa ka profile: mas taas kini, mas taas ang bitrate, ug busa ang kalidad.
Bisan pa, ang parameter sa bitpool wala gihigot sa usa ka piho nga profile; Ang bitrate naimpluwensyahan usab sa ubang mga parameter: tipo sa mga channel, gidaghanon sa frequency band, gidaghanon sa mga bloke. Mahimo nimong madugangan ang bitrate sa dili direkta, pinaagi sa pag-uyon sa dili standard nga mga profile, nga dili usbon ang bitpool.

Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Pormula sa pagkalkula sa SBC bitrate

Pananglitan, ang Dual Channel mode nag-encode sa mga channel nga gilain, gamit ang tibuok bitpool alang sa matag channel. Pinaagi sa pagpugos sa device sa paggamit sa Dual Channel imbes sa Joint Stereo, halos doblehon nato ang bitrate nga adunay samang maximum bitpool value: 617 kbps.
Sa akong opinyon, ang paggamit sa usa ka bili sa bitpool nga wala gihigot sa usa ka profile sa yugto sa negosasyon usa ka sayup sa sumbanan sa A2DP, nga misangpot sa usa ka artipisyal nga limitasyon sa kalidad sa SBC. Mas makataronganon ang pag-negosasyon sa bitrate kaysa bitpool.

Kini nga mga pirmi nga Bitpool ug Bitrate nga mga kantidad naggikan sa usa ka lamesa nga adunay girekomenda nga mga kantidad aron magamit alang sa taas nga kalidad nga audio. Apan ang usa ka rekomendasyon dili rason nga limitahan ang imong kaugalingon niini nga mga mithi.

Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Ang detalye sa A2DP v1.2, nga aktibo gikan sa 2007 hangtod 2015, nanginahanglan sa tanan nga mga aparato sa pag-decode nga molihok sa husto nga adunay mga bitrate hangtod sa 512 kbps:

Ang decoder sa SNK kinahanglang mosuporta sa tanang posibleng bitpool values ​​nga dili moresulta sa sobra sa maximum bit rate. Kini nga profile naglimite sa anaa nga maximum bit rate ngadto sa 320kb/s alang sa mono, ug 512kb/s alang sa duha ka channel mode.

Sa bag-ong bersyon sa espesipikasyon walay limitasyon sa bitrate. Gibanabana nga ang mga modernong headphone nga gipagawas pagkahuman sa 2015 nga nagsuporta sa EDR makasuporta sa mga bit rate hangtod sa β‰ˆ730 kbps.

Sa pipila ka rason, ang Linux (PulseAudio), Android, Blackberry ug macOS Bluetooth stacks nga akong gisulayan adunay artipisyal nga mga limitasyon sa maximum nga bili sa bitpool parameter, nga direktang makaapekto sa maximum bitrate. Apan dili kini ang pinakadako nga problema; hapit tanan nga mga headphone naglimite usab sa labing taas nga kantidad sa bitpool sa 53.
Sama sa akong nakita na, kadaghanan sa mga himan nagtrabaho nga hingpit sa usa ka giusab nga Bluetooth stack nga adunay bitrate nga 551 kbps, nga walay mga paghunong o mga crackles. Apan ang ingon nga bitrate dili gyud makanunayon ubos sa normal nga mga kondisyon, sa regular nga Bluetooth stacks.

Pag-usab sa Bluetooth stack

Ang bisan unsang Bluetooth stack nga nahiuyon sa A2DP standard adunay suporta alang sa Dual Channel mode, apan dili posible nga ma-activate kini gikan sa interface.

Magdugang ta ug toggle sa interface! Naghimo ako og mga patch alang sa Android 8.1 ug Android 9 nga nagdugang sa bug-os nga suporta sa Dual Channel sa stack, pagdugang og mode sa mode toggle menu sa dev tools, ug pagtratar sa Dual Channel-enabled nga mga SBC nga daw dugang nga codec sama sa aptX , AAC, o LDAC ( Android nagtawag niini nga HD Audio) pinaagi sa pagdugang og checkmark sa Bluetooth device settings. Mao kini ang hitsura niini:

Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Patch alang sa Android 9
Patch alang sa Android 8.1

Kung ang checkbox gi-aktibo, ang Bluetooth audio magsugod sa pagpasa sa bitrate 551 kbps, kung ang mga headphone nagsuporta sa gikusgon sa koneksyon nga 3 Mbit/s, o 452 kbps, kung ang mga headphone nagsuporta lamang sa 2 Mbit/s.

Kini nga patch gilakip sa mosunod nga mga alternatibong firmwares:

  • LineageOS
  • Pagkabanhaw Remix
  • crDroid

Diin gikan ang 551 ug 452 kbit/s?

Ang Bluetooth air-sharing nga teknolohiya gidesinyo aron episyenteng magpadala sa dagkong fixed-size nga mga pakete. Ang pagbalhin sa data mahitabo sa mga slots, ang kinadak-ang gidaghanon sa mga slots nga gipadala sa usa ka transfer mao ang 5. Adunay usab mga transfer mode nga naggamit sa 1 o 3 nga mga slots, apan dili 2 o 4. Sa 5 nga mga slots mahimo nimong ibalhin ang hangtod sa 679 bytes sa gikusgon nga koneksyon sa 2 Mbit/s ug hangtod sa 1021 bytes sa gikusgon nga 3 Mbit/s, ug sa 3 - 367 ug 552 bytes, matag usa.

Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Kung gusto namon nga ibalhin ang gamay nga data kaysa 679 o 1021 bytes, apan labaw pa sa 367 o 552 bytes, ang pagbalhin magkuha gihapon og 5 nga mga slot ug ang data ibalhin sa parehas nga oras, nga makapakunhod sa kahusayan sa pagbalhin.

Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Ang SBC sa Dual Channel mode, sa 44100 Hz audio nga adunay Bitpool 38 nga mga parameter, 16 ka bloke kada frame, 8 frequency range, nag-encode sa audio ngadto sa 164 byte nga mga frame, nga adunay bitrate nga 452 kbps.
Ang audio kinahanglang ma-encapsulated sa L2CAP ug AVDTP transfer protocols, nga mokuha ug 16 bytes gikan sa audio payload.

Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Busa, ang usa ka Bluetooth transmission nga adunay 5 ka slots maka-accommodate ug 4 audio frames:

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

Kami mohaum sa 11.7 ms sa audio data ngadto sa packet nga gipadala, nga ipadala sa 3.75 ms, ug kami adunay 6 ka wala magamit nga byte nga nahibilin sa pakete.
Kung ipataas nimo og gamay ang bitpool, dili na posible ang pag-pack sa 4 ka audio frame sa usa ka pakete. Kinahanglan ka nga magpadala ug 3 ka mga frame matag higayon, nga makapamenos sa kahusayan sa transmission, makapamenos sa gidaghanon sa audio nga gipasa matag frame, ug mas dali nga mosangpot sa audio stuttering sa dili maayo nga kahimtang sa radyo.

Sa samang paagi, usa ka bitrate nga 551 kbit/s ang gipili para sa EDR 3 Mbit/s: uban sa Bitpool 47, 16 ka bloke kada frame, 8 frequency range, ang frame size 200 bytes, nga may bitrate nga 551 kbit/s. Ang usa ka pakete adunay 5 ka frame o 14.6 ms sa musika.

Ang algorithm sa pagkalkula sa tanan nga mga parameter sa SBC medyo komplikado, dali ka maglibog kung mag-ihap ka nga mano-mano, mao nga naghimo ako usa ka interactive nga calculator aron matabangan ang mga interesado: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Nganong gikinahanglan kining tanan?

Sukwahi sa popular nga pagtuo bahin sa kalidad sa tunog sa aptX codec, sa pipila ka mga file makahimo kini og mga resulta nga mas grabe pa kay sa SBC nga adunay standard bitrate nga 328 kbps.

Ang SBC dinamikong naggahin sa quantization bits sa frequency bands sa ubos ngadto sa taas nga basehan. Kung ang tanan nga bitrate gigamit alang sa ubos ug tunga nga mga frequency, ang taas nga mga frequency "maputol" (adunay kahilom na hinuon).
Gi-quantize sa aptX ang mga frequency band nga adunay parehas nga gidaghanon sa mga bit sa tanan nga panahon, mao nga kini adunay kanunay nga bitrate: 352 kbps alang sa 44.1 kHz, 384 kbps alang sa 48 kHz, ug dili kini "bit-shift" sa mga frequency nga labing nanginahanglan niini. . Dili sama sa SBC, ang aptX dili "magputol" sa mga frequency, apan makadugang sa kasaba sa quantization ngadto kanila, makapakunhod sa dinamikong hanay sa audio, ug usahay magpaila sa kinaiya nga crackling. Ang SBC "nagkaon sa mga detalye" - gisalikway ang pinakahilom nga mga lugar.
Sa kasagaran, kon itandi sa SBC 328k, ang aptX nagpaila sa dili kaayo pagtuis sa musika nga adunay lapad nga frequency range, apan sa musika nga adunay pig-ot nga frequency range ug usa ka lapad nga dinamikong range, ang SBC 328k usahay makadaog.

Atong tagdon ang usa ka espesyal nga kaso. Spectrogram sa usa ka rekording sa pagpatugtog sa piano:
Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Ang nag-unang enerhiya anaa sa mga frequency gikan sa 0 ngadto sa 4 kHz, ug nagpadayon hangtod sa 10 kHz.
Ang spectrogram sa usa ka file nga gi-compress sa aptX ingon niini:
Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Ug kini ang hitsura sa SBC 328k.
Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Makita nga ang SBC 328k matag karon ug unya hingpit nga gipalong ang range nga labaw sa 16 kHz, ug gigasto ang tanan nga magamit nga bitrate sa mga sakup nga ubos sa kini nga kantidad. Bisan pa, ang aptX nagpaila sa dugang nga pagtuis sa frequency spectrum nga madungog sa dalunggan sa tawo, ingon nga makita sa gikuha nga orihinal nga spectrogram gikan sa aptX spectrogram (mas hayag, labi nga pagtuis):
Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Samtang ang SBC 328k nagdaot sa signal nga dili kaayo sa sakup gikan sa 0 hangtod 10 kHz, ug giputol ang nahabilin:
Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Ang 485k bitrate sa SBC igo na aron mapreserbar ang tibuok frequency range, nga walay pag-disable sa mga banda.
Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Ang SBC 485k labi ka nag-una sa aptX sa kini nga track sa 0-15 kHz range, nga adunay gamay apan makita gihapon nga kalainan sa 15-22 kHz (mas ngitngit ang dili kaayo pagtuis):
Among giusab ang Bluetooth stack aron mapalambo ang tingog sa mga headphone nga walay AAC, aptX ug LDAC codec

Archive sa orihinal nga audio, SBC ug aptX.

Pinaagi sa pagbalhin sa usa ka high-bitrate nga SBC, makakuha ka og audio nga kanunay nga modaog sa aptX sa bisan unsang headphone. Sa mga headphone nga nagsuporta sa 3 Mbps EDR connectivity, ang bitrate nga 551 kbps makapagawas ug tingog nga ikatandi sa aptX HD.

Mahimo ba nimo ang labi pa?

Ang Android patch naglakip usab sa usa ka kapilian aron dugangan pa ang bitrate alang sa 2 Mbps EDR nga mga himan. Mahimo nimong dugangan ang bitrate gikan sa 452 kbit/s ngadto sa 595 kbit/s, sa gasto sa pagkunhod sa transmission stability sa lisud nga kahimtang sa radyo.
Igo na nga ibutang ang persist.bluetooth.sbc_hd_higher_bitrate variable ngadto sa 1:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Ang grabe nga bitrate patch hangtod karon gisagop lamang sa LineageOS 15.1, apan dili sa 16.0.

Pagkaangay sa Device

Ang SBC Dual Channel gisuportahan sa hapit tanan nga mga headphone, speaker ug mga yunit sa ulo sa awto. Dili kini katingad-an - ang sumbanan nanginahanglan suporta niini sa bisan unsang mga aparato sa pag-decode. Adunay gamay nga gidaghanon sa mga himan diin kini nga mode hinungdan sa mga problema, apan kini mga hilit nga mga higayon.
Dugang nga mga detalye bahin sa mga katugbang nga aparato makita sa 4pda o xda-developers.

Pagtandi sa mga kalainan sa tunog

Naghimo ako usa ka serbisyo sa web nga nag-encode sa audio sa SBC (ingon usab sa aptX ug aptX HD) sa tinuud nga oras, diha mismo sa browser. Uban niini, mahimo nimong itandi ang tunog sa lainlaing mga profile sa SBC ug uban pang mga codec, nga wala gyud magpadala sa audio pinaagi sa Bluetooth, sa bisan unsang wired headphone, speaker, ug imong paborito nga musika, ug direkta usab nga usbon ang mga parameter sa pag-encode samtang nagdula og audio.
btcodecs.valdikss.org.ru/sbc-encoder

Kontaka ang Android Developers

Nagsulat ako sa daghang mga developer sa Bluetooth stack sa Google nga gihangyo sila nga ikonsiderar ang paglakip sa mga patch sa panguna nga sanga sa Android - AOSP, apan wala makadawat usa ka tubag. Akong mga patsa sa Gerrit patch system alang sa Android nagpabilin usab nga walay komento gikan sa bisan kinsa nga nalambigit.
Malipay ko kung makakuha ko ug tabang sa pagkontak sa mga developer sa Google ug pagdala sa SBC HD sa Android. Ang patch sa gerrit kay outdated na (kini usa sa mga sayo nga rebisyon), ug akong i-update kini kung ang mga developers interesado sa akong mga pagbag-o (dili sayon ​​alang kanako ang pag-update niini, wala akoy mga device nga compatible sa Android Q ).

konklusyon

Ang mga tiggamit sa mga smartphone nga adunay LineageOS, Resurrection Remix ug crDroid firmware makatagamtam sa mas maayo nga kalidad sa tunog karon, i-aktibo lang ang kapilian sa mga setting sa Bluetooth device. Ang mga tiggamit sa Linux mahimo usab nga makakuha og dugang nga bitrate sa SBC pinaagi sa pag-instalar patch gikan sa Pali Rohar, nga, taliwala sa ubang mga butang, nagdugang suporta alang sa aptX, aptX HD ug FastStream codec.

Source: www.habr.com

Idugang sa usa ka comment