Kako spremeniti Bluetooth stacks v Android za močno izboljšano kakovost zvoka Bluetooth

Opozorilo: To je zelo napreden priročnik, ki vključuje spreminjanje vaših paketov Bluetooth v sistemu Android - preberite ta priročnik v celoti in upoštevajte vsa navodila natančno, kot so navedena.

Kljub dejstvu, da so slušalke Bluetooth in zvok Bluetooth postali precej priljubljeni, je za avdiofile kar nekaj težav, saj dokazano, da Bluetooth zmanjšuje kakovost zvoka, saj se bitji zvočnih informacij in frekvenc izgubljajo v zraku zaradi pretakanja Bluetooth.

Zato nekateri proizvajalci izdajajo kodeke aptX in LDAC, da izboljšajo kakovost zvoka v primerjavi s standardnim kodekom SBC Bluetooth, ki ga podpirajo vse slušalke in večina naprav Bluetooth - vendar so naprave z aptX in LDAC kodeki precej dražje, ker so ti kodeki zahtevajo licenčne pristojbine, ki jih potrošnik plača na dolgi rok.

Nizka kakovost zvoka kodeka SBC Bluetooth je posledica umetnih omejitev vseh trenutnih konfiguracij Bluetooth in slušalk, zato je mogoče omejiti to omejitev na vseh obstoječih napravah.

Če vas zvok Bluetooth zanima, vam na koncu tega vodnika pokažemo, kako vzemite zapisnik za zvočni zapis Bluetooth in ga pregledate, da vidite, kakšno kakovost zvoka in frekvenco zvoka dobite s Bluetooth sprejemnika Android.

Večina tega priročnika se bo osredotočila na nekaj preprostih nastavitev in načinov branja zvočnega izhoda Bluetooth, s čimer boste izboljšali kakovost izhoda standardnih kodekov SBC Bluetooth - pozorno preberite celoten vodnik, saj je zelo poučen in obstaja veliko različnih stvari utripati ali prilagoditi, odvisno od modela vaše naprave.

Na koncu tega priročnika je seznam vnaprej zakrpanih paketov Bluetooth za številne priljubljene naprave Android - te se lahko obnovijo kot obnovitev, kot bi jih lahko uporabili vsi drugi .zip - če nobena od naprav ne pripada vam, sledite navodilom za spreminjanje paketov Bluetooth v sistemu Android.

Kratke tehnične informacije o kodeku SBC

SBC ima veliko različnih parametrov, o katerih se pogaja med fazo nastavitve povezave:

  • Vrsta in številka zvočnega kanala: Skupni stereo, stereo, dvojni kanal, mono;
  • Število frekvenčnih pasov: 4 ali 8;
  • Število zvočnih blokov v enem paketu: 4, 8, 12, 16;
  • Algoritem kvantizacije dodeljevanja bitov: Glasnost, SNR;
  • Največji in minimalni bitni bazen, uporabljen v postopku kvantizacije: običajno 2-53.

Dekoder mora podpirati katero koli kombinacijo teh parametrov. Dajalnik lahko izvaja le del njih.

Obstoječi Bluetooth se ponavadi dogovorijo o naslednjem profilu: Joint Stereo, 8 pasov, 16 blokov, Loudness, bitpool 2..53. Ta profil kodira 44, 1 kHz zvok z bitrate 328 kbps.

Parameter Bitpool neposredno vpliva na bitrate znotraj istega profila: višji kot je, višji je bitrate in s tem tudi kakovost.

Vendar parameter bitpola ni vezan na določen profil. Na bitrate vplivajo tudi drugi parametri: vrsta zvočnega kanala, število frekvenčnih pasov, število zvočnih blokov. Bitrate lahko posredno povečate s pogajanjem o nestandardnih profilih, ne da bi spremenili bitpool.

Na primer, Dual Channel kodira kanale ločeno, pri čemer uporablja celoten bitpool za vsak kanal. Prisiljanje naprave za uporabo dvojnega kanala namesto Joint Stereo nam bo skoraj podvojilo bitrate pri istem največjem bitpolu, 617 kbps.

Zdi se mi, da bi moral bitpool biti notranja spremenljivka. Napaka v zasnovi specifikacije A2DP je, da vrednost bitpola ni vezana na druge parametre kodeka in je določena le kot globalna vrednost.

Te fiksne vrednosti Bitpola in Bitka izvirajo iz priporočenih vrednosti za kakovostni zvok. Toda priporočilo ni izgovor, da profil omejite na te vrednosti.

Specifikacija A2DP v1.2, ki je bila aktivna od leta 2007 do 2015, zahteva, da vsi dekoderji pravilno delujejo z bitrati do 512 kbps:

Dekoder SNK mora podpirati vse možne vrednosti bitpola, ki ne povzročijo preseganja največje bitne hitrosti. Ta profil omejuje razpoložljivo največjo hitrost bitja na 320kb / s za mono in 512kb / s za dvokanalne načine.

V novi različici specifikacije ni omejitve bitrate. Domnevajo, da lahko sodobne slušalke, izdane po letu 2015, podpirajo bitrate do 1000 kbps .

Iz nekega razloga imajo vsi trenutno preizkušeni nizi Bluetooth (Linux (PulseAudio), Android, Blackberry in macOS) umetne omejitve največjega bitpolskega parametra, kar neposredno vpliva na največjo hitrost prenosa. A to ni največja težava, skoraj vse slušalke tudi maksimalno vrednost bitpola omejijo na 53.

Večina naprav deluje odlično na spremenjenem nizu Bluetooth z bitrate 507 kbps, brez prekinitev in pokanja. Toda takšen bitrate se v običajnih pogojih ne bo nikoli dogovarjal z zalogami Bluetooth.

*** Potrebno za testiranje z vodniki spodaj: bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso.torrent

Kako testirati na PC-ju

Preskus združljivosti slušalk visoke hitrosti SBC je najlažje opraviti v računalniku z vmesnikom Bluetooth. Pripravila sem sliko Ubuntu s spremenjenim nizom Bluetooth, ki ga je mogoče zagnati kot v virtualnem stroju (s povezovanjem Bluetooth adapterja kot USB naprave znotraj virtualnega stroja deluje tudi z adapterji, vgrajenimi v prenosnike) ali s pomočjo zagona iz bliskovni pogon USB. Ta slika uporablja naslednji profil: Dvojni kanal, 8 pasov, 16 blokov, Glasnost, bitpool 2..41, 44, 1 kHz, ki zagotavlja 485 kbps bitrate.

Teče v VM

  • Prenesite Virtualbox in razširitveni paket Virtualbox: //www.virtualbox.org/wiki/Downloads;
  • Namestite Virtualbox, zaženite ga;
  • Namestite razširitveni paket z uporabo datoteke → nastavitve → razširitve;
  • Ustvarite nov virtualni stroj: Linux, Ubuntu (64-bitni), 1024 RAM-a. Ne ustvarite trdega diska.
  • Pomaknite se do nastavitev virtualne naprave, v Storage izberite Controller: IDE, Empty, pritisnite ikono CD → Izberite datoteko navideznega optičnega diska;
  • Izberite preneseni bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso;
  • Shrani in zapri okno z nastavitvami, zaženite virtualni stroj;
  • Z desno tipko miške kliknite ikono kabla USB v spodnjem desnem kotu, izberite Bluetooth adapter;

Teče v računalniku

Slika podpira zagon BIOS / CSM in UEFI.

  • Sliko shranite na bliskovni pogon USB s pomočjo Etcher: //etcher.io/. Ta operacija bo izbrisala vse obstoječe datoteke na USB pogonu.
  • Izklopite računalnik;
  • Vstavite bliskovni pogon USB, vklopite računalnik in pritisnite gumb za zaporedni zagon (običajno Esc ali F12);
  • Izberite svoj bliskovni pogon USB.

Opravljanje testa

  • (neobvezno, vendar priporočljivo) Na namizju dvakrat kliknite skript »Btsnoop Dump«. Začel bo zajem podatkov Bluetooth za kasnejšo analizo. Ne zapirajte okna terminala.
  • Preklopite slušalke v način združevanja;
  • Kliknite na puščico v zgornjem desnem kotu, izberite ikono Bluetooth → Bluetooth Settings;
  • Izberite slušalke, počakajte, da se seznanjanje konča, in zaprite okno;
  • Nastavite glasnost Ubuntu na približno 2/3. Zmanjšajte glasnost tudi s tipkami za slušalke, saj je po združevanju lahko zelo glasen.
  • Odprite mapo »glasba«, predvajajte »testrecord1.flac«;
  • (neobvezno, vendar priporočljivo) Zaprite predvajalnik, zaprite okno terminala. To bo ustavilo zajem podatkov.
  • (neobvezno, vendar priporočljivo) Odprite brskalnik Firefox, naložite smetišče podatkov (btsnoop_hci.btsnoop na namizju) na //btcodecs.valdikss.org.ru/

V glasbeni mapi lahko poslušate drugo glasbo ali naložite svojo;

V slušalkah ne sme biti prask, prekinitev zvoka ali drugih motenj zvoka. Če slišite kakovosten zvok, to pomeni, da vaše slušalke podpirajo zvok z hitrostjo 485 kbps.

Kako testirati na napravi Android

Če želite preizkusiti pametni telefon ali tablični računalnik Android, morate uporabiti spremenjen nabor Bluetooth, ki zahteva korensko privilegiranje.

Kako zajeti prenos podatkov Bluetooth v Android

  1. Izklopite Bluetooth;
  2. V nastavitvah razvijalca omogočite stikalo »omogoči Bluetooth HCI dnevnik snoop«;
  3. Vklopite Bluetooth, povežite se s slušalkami s pomočjo menija Bluetooth (to je pomembno! Ne dovolite samodejne povezave!);
  4. Predvajajte kratek zvočni vzorec;
  5. Odprite nastavitve razvijalca, onemogočite stikalo »Omogoči Bluetooth HCI dnevnik snoop«;
  6. Treba je ustvariti /storage/emulated/0/btsnoop_hci.log ali /data/misc/bluetooth/logs/btsnoop_hci.log. Če manjka, odprite /etc/bluetooth/bt_stack.conf z urejevalnikom besedil in poglejte pot v možnosti BtSnoopFileName.

V slušalkah ne sme biti prask, prekinitev zvoka ali drugih motenj zvoka. Če s pomočjo zakrpane knjižnice slišite kakovosten zvok, to pomeni, da vaše slušalke podpirajo zvok z hitrostjo 512 kbps.

Pozorno upoštevajte zgornji algoritem. Še posebej, če izklopite slušalke ali prekinete povezavo po seznanjanju, je pomembno, da se s slušalkami ročno povežete z nastavitvami Bluetooth, ne dovolite samodejne povezave!

Naprave, ki podpirajo vsaj 512 kbit / s SBC

  • 1 VEČ iBFree
  • JBL Everest 310
  • JBL Everest 700
  • Skullcandy HESH 3
  • Sony WI-C400
  • Sony MDR-1ABT
  • Sony MDR-ZX770BT
  • Sony MDR-XB650BT
  • Sony MDR-XB950B1
  • Sony SBH50
  • Bluedio T4s (Bitpool max 39. Odzove se, da ne podpira dvojnega kanala, ampak deluje, če je prisilno, 462 kbit / s. Ne ustreza specifikaciji A2DP.)
  • Bluedio T5 (Odzove se, da ne podpira dvojnega kanala, vendar deluje, če je prisilno. Ne ustreza specifikaciji A2DP.)
  • Bluedio T6 (Odgovarjajte, da ne podpira dvojnega kanala, vendar delujte, če je prisiljen. Ne ustreza specifikaciji A2DP. Sprejemite čip Max 97220.)
  • Marshall Major II Bluetooth
  • Overdrive RealForce D1
  • Edifier W830BT
  • DEXP BT-250
  • Logitech BT adapter
  • Noname avtomobilska glavna enota (CSR8645 čip)
  • Avtomobilska glavna enota Sony DSX-A400BT

Naprave, ki podpirajo SBC nad 512 kbit / s

  • JBL Everest 310 (617-660 kbit / s)
  • Sony WI-C400 (576 kbit / s)
  • Sony MDR-ZX770BT (617-660 kbit / s)
  • Marshall Major II Bluetooth (617-660 kbit / s)
  • Overdrive RealForce D1 (730 kbit / s, dvokanalni, 4 pod pasovi)

Naprave, ki ne delujejo z višjimi bitrati ali dvojnim kanalom

  1. Harper HB-202 (ocvirki; Beken BK3256 čip)
  2. Sony Ericsson MW600 (visokofrekvenčno popačenje, ocvirki; naprava iz leta 2009)

Zakaj je to pomembno: SBC 328k in 485k vs aptX

V nasprotju z razširjenim prepričanjem o kakovosti zvoka aptX lahko v nekaterih primerih proizvede slabšo kakovost zvoka kot SBC s standardno bitko 328k.

SBC dinamično dodeli kvantizacijske bite za frekvenčne pasove, ki delujejo od spodaj navzgor. Če je bila celotna bitrate uporabljena za spodnjo in srednjo frekvenco, se zgornje frekvence "odrežejo" (utišajo).

aptX kvantizira frekvenčne pasove z enakim številom bitov nenehno, zaradi česar je konstantni bitrate kodek: 352 kbps za 44, 1 kHz, 384 kbps za 48 kHz. Ne more "prestaviti bitov" na frekvence, ki so v njih večinoma potrebne. Za razliko od SBC-ja aptX ne bo "zmanjšal" frekvenc, ampak jim bo dodal kvantizacijski hrup, zmanjšal dinamični razpon zvoka in včasih vnesel praskete. SBC nasprotno "poje podrobnosti" - zavrže najtišja območja.

V povprečju aptX v primerjavi s SBC 328k naredi manj motenj v glasbi s širokim frekvenčnim območjem, toda pri glasbi z ozkim frekvenčnim območjem in širokim dinamičnim razponom SBC 328k včasih zmaga.

Upoštevajmo poseben primer, snemanje klavirja. Tukaj je spektrogram:

Največ energije je v frekvencah 0-4 kHz in traja do 10 kHz.

Spektrogram datoteke aptX datoteke izgleda tako:

Tukaj je SBC 328k:

Vidimo, da je SBC 328k periodično popolnoma zmanjšal območje nad 16 kHz in uporabil vse razpoložljive bitrate za obsege pod to vrednostjo. Vendar pa je aptX v frekvenčni spekter, ki ga človeško uho sliši, uvedel več popačenj, kar je mogoče videti na odštetem originalnem spektrogramu iz spektrograma aptX (svetlejši, več popačenja):

Medtem ko je SBC 328k vnesel manj izkrivljanja, je signal v območju od 0 do 10 kHz, ostalo pa:

485 kb za SBC je bilo dovolj, da shranite celoten frekvenčni razpon, ne da bi prekinili pasove.

SBC 485k na tem zvočnem vzorcu je veliko boljši od aptX v območju od 0 do 15 kHz in z manjšo, a še vedno opazno razliko - pri 15-22 kHz (temnejša, manj popačenja):

Če preklopite na visoko bitreten SBC, boste večino časa dobili zvok, ki je boljši od aptX, v vseh slušalkah.

  • original_and_aptx.zip
  • sbc.zip

Kako spremeniti Bluetooth stacks na Android 5 - 7

Te spremembe je treba uporabiti za zaloge Android bluetooth Bluetooth Bluedroid (Android 5) in Fluoride (Android 6-7). Qualcomm-spremenjen sveženj ni podprt.

Zamenjajte skupni stereo z dvojnim kanalom v standardni konfiguraciji SBC

android / platforma / zunanji / bluetooth / bluedroid / btif / co / bta_av_co.c: 99

Koda:

 konst tA2D_SBC_CIE btif_av_sbc_default_config = {BTIF_AV_SBC_DEFAULT_SAMP_FREQ, / * samp_freq * / A2D_SBC_IE_CH_MD_JOINT, / * ch_mode * / A2D_SBC_IE_BLOCKS_16, / * block_len * / A2D_SBC_IE_SUBBAND_8, / * num_subbands * / A2D_SBC_IE_ALLOC_MD_L, / * alloc_mthd * / BTA_AV_CO_SBC_MAX_BITPOOL, / * max_bitpool * / A2D_SBC_IE_MIN_BITPOOL / * min_bitpool * /}; 

A2D_SBC_IE_CH_MD_JOINT zamenjajte z A2D_SBC_IE_CH_MD_DUAL.

Povečajte prednost dvojnega kanala

android / platforma / zunanji / bluetooth / bluedroid / btif / co / bta_av_co.c: 4

Koda:

 če (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; drugače, če (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; drugače, če (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; drugače, če (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; Premakni se, če imaš A2D_SBC_IE_CH_MD_DUAL na vrh. 
  1. Onemogočite ali povečate omejitev bitrate

Android bluetooth stack nima samo omejitve bitpola, ampak tudi omejitev hitrosti, 328 kbit / s. Če slušalke podpirajo na primer bitpool 53 za 48 kHz, bo Android znižal bitpool navzdol, da se prilega meji 328 kbit / s. To se bo zgodilo PO pogajanju s kodekom na stopnji kodiranja, ne upoštevajte vrednosti bitpola v paketu Bluetooth SetCapability.

android / platforma / zunanji / bluetooth / bluedroid / btif / src / btif_media_task.c: 172

Koda:

 #define DEFAULT_SBC_BITRATE 328 

Nadomestite z 512.

  1. (samo za eksperimente) Onemogoči omejitev MTU.

To je potrebno za bitrate, višje od ~ 580 kbit / s.

btif / src / btif_media_task.c: 174

Koda:

 / * 2DH5 koristna velikost 679 bajtov - (4 bajt L2CAP Header + 12 bytes AVDTP Header) * / #define MAX_2MBPS_AVDTP_MTU 663 

Kako spremeniti Bluetooth stacks na Android 8 - 9

Te spremembe niso preizkušene, vendar bi morale delovati.

Dodajte podporo dvojnega kanala v vir A2DP SBC

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:55

Koda:

 / * Zmožnosti kodeka SBC SRC * / statični const tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_SAMP_FREQ_44, / * samp_freq * / (A2DP_SBC_IE_CH_MD_MONO; 

dodajte A2DP_SBC_IE_CH_MD_DUAL v ch_mode.

Zamenjajte skupni stereo z dvojnim kanalom v privzeti konfiguraciji

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:82

Koda:

 / * Privzeti SBC kodek konfiguracija * / konst tA2DP_SBC_CIE a2dp_sbc_default_config = {A2DP_SBC_IE_SAMP_FREQ_44, / * samp_freq * / A2DP_SBC_IE_CH_MD_JOINT, / * ch_mode * / A2DP_SBC_IE_BLOCKS_16, / * block_len * / A2DP_SBC_IE_SUBBAND_8, / * num_subbands * / A2DP_SBC_IE_ALLOC_MD_L, / * alloc_method * / A2DP_SBC_IE_MIN_BITPOOL, / * min_bitpool * / A2DP_SBC_MAX_BITPOOL, / * max_bitpool * / BTAV_A2DP_CODEC_BITS_PER_SAMPLE_16 / * bits_per_sample * /}; 

A2DP_SBC_IE_CH_MD_JOINT zamenjajte z A2DP_SBC_IE_CH_MD_DUAL.

Povečajte prednost dvojnega kanala

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:1155

Koda:

 statični bool select_best_channel_mode (uint8_t ch_mode, tA2DP_SBC_CIE * p_result, btav_a2dp_codec_config_t * p_codec_config) {if (ch_mode & A2DP_SBC_IE_CH_MD_JOINT_> P_DD_JOINT_> p_res_D_IE_MD_IE_mD_E_D_IE_mD_E_D_IE_mD_E_D_IE_mD_E_D_IE_mD_De_De_Se_De) p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; vrnitev resnična; } if (ch_mode & A2DP_SBC_IE_CH_MD_STEREO) {p_result-> ch_mode = A2DP_SBC_IE_CH_MD_STEREO; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; vrnitev resnična; } if (ch_mode & A2DP_SBC_IE_CH_MD_DUAL) {p_result-> ch_mode = A2DP_SBC_IE_CH_MD_DUAL; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; vrnitev resnična; } if (ch_mode & A2DP_SBC_IE_CH_MD_MONO) {p_result-> ch_mode = A2DP_SBC_IE_CH_MD_MONO; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_MONO; vrnitev resnična; } vrniti napačno; } 

Premakni se, če imaš A2DP_SBC_IE_CH_MD_DUAL na vrh.

Povečajte omejitev hitrosti prenosa

/platform/system/bt/stack/a2dp/a2dp_sbc_encoder.cc:42

Koda:

 #define A2DP_SBC_DEFAULT_BITRATE 328 

Nadomestite z 512.

  1. (samo za eksperimente) Onemogoči omejitev MTU

To je potrebno za bitrate, višje od ~ 580 kbit / s.

/platform/system/bt/stack/a2dp/a2dp_sbc_encoder.cc:47

Koda:

 #define MAX_2MBPS_AVDTP_MTU 663 

Zakrpane povezave Bluetooth (vnetljivo)

  • Le Max 2 Oreo Patched.zip
  • LeEco Cool Changer S1 EUI_5.8.19S.zip
  • Leeco LE2 (EUI 5.9.26s, Android 6) .zip
  • Xiaomi Mi Note (Miui 9 Miui.su usnkreal v8.4.12, Android 6.0.1) .zip
  • Xiaomi mi note 3 (MIUI 9, Android 7) .zip
  • Xiaomi Mi4c (Android 7.0 NRD90M, MIUI-9.5 9.5.1.0 (NXKCNFA)).
  • Xiaomi MI5s (MIUI Global 9.6.1.0, Android 7) .zip
  • Xiaomi Redmi 3s (android 6.01, mmb29m, miui globalni 9.6.1.0) .zip
  • Xiaomi Redmi 4 (MiuiPro 10 8.8.2, Android 6.0.1, MMB29M) .zip
  • Xiaomi Redmi 4 Prime.zip
  • Xiaomi Redmi 4 pro (MIUI 9, miuipro 8.4.26) .zip
  • Xiaomi Redmi Note 3 (Resurrection Remix Android 7.1.2_r36) .zip
  • Redmi Note 4x (Masik Premium, android 7.0) .zip
  • Asus Zoom (Android 5, 2.26.40.108_20160520) .zip
  • Le Max 2 Oreo Patched.zip
  • Huawei P9 (Android 7) .zip
  • Samsung Galaxy S4 LTE GT-I9505 (Android 7.1.2; LineageOS 14.1-20180615-NIGHTLY-jfltexx) .zip
  • zadrgo
  • Le Max 2 Oreo Patched.zip

Zanimivi Članki