Kako izmijeniti Bluetooth stokove na Androidu za uvelike poboljšanu kvalitetu zvuka Bluetooth

Upozorenje: Ovo je visoko napredni vodič koji uključuje izmjenu Bluetooth stokova na Androidu - pročitajte ovaj vodič u cijelosti i slijedite sve upute kako su date.

Unatoč činjenici da su Bluetooth slušalice i Bluetooth audio postali prilično popularni, to je problem s audiofilima jer je dokazano da Bluetooth smanjuje kvalitetu zvuka, jer se bitovi audio informacija i frekvencija gube u zraku putem Bluetooth streaminga.

Zbog toga neki proizvođači stavljaju kodeke aptX i LDAC, kako bi poboljšali kvalitetu zvuka u odnosu na standardni SBC Bluetooth kodek koji podržavaju sve slušalice i većina Bluetooth uređaja - međutim, uređaji s aptX i LDAC kodecima su puno skuplji jer su ti kodeci zahtijevaju naknade za licenciranje koje potrošač plaća dugoročno.

Niska kvaliteta zvuka SBC Bluetooth kodeka uzrokovana je umjetnim ograničenjima svih trenutnih konfiguracija Bluetooth stola i slušalica, a ovo ograničenje može se zaobići na bilo kojim postojećim uređajima.

Ako vas zanima Bluetooth zvuk, na kraju ovog vodiča pokazat ćemo vam kako da preuzmete deponu Bluetooth audio zapisa i provjerite je li kakvu kvalitetu i frekvenciju zvuka dobijate s Bluetooth prijemnika vašeg Androida.

Većina ovog vodiča usredotočit će se na nekoliko jednostavnih podešavanja i načina čitanja Bluetooth audio izlaza kako bi se znatno poboljšala kvaliteta izlaznih podataka standardnih SBC Bluetooth kodeka - molimo vas pročitajte čitav ovaj vodič pažljivo kao prilično obrazovan i postoji puno različitih stvari treptati ili podešavati, ovisno o modelu vašeg uređaja.

Na ovom kraju ovog vodiča nalazi se popis unaprijed zakrpljenih Bluetooth stapova za mnoge popularne Android uređaje - ti se mogu oporaviti kao i bilo koji drugi flash .zip - ako nijedan od uređaja ne pripada vama, imat ćete slijediti vodič za izmjenu Bluetooth stokova na Androidu.

Kratke tehničke informacije o SBC kodeku

SBC ima puno različitih parametara dogovorenih u fazi postavljanja veze:

  • Vrsta i broj audio kanala: Zajednički stereo, stereo, dvostruki kanal, mono;
  • Broj frekvencijskih opsega: 4 ili 8;
  • Broj audio blokova u jednom paketu: 4, 8, 12, 16;
  • Algoritam za raspodjelu kvantiziranog bita: Glasnost, SNR;
  • Maksimalni i minimalni bitni bazen koji se koristi u procesu kvantizacije: obično 2-53.

Dekoder je potreban da podržava bilo koju kombinaciju ovih parametara. Enkoder može implementirati samo dio njih.

Postojeće Bluetooth hrpe obično pregovaraju o sljedećem profilu: Joint Stereo, 8 bendova, 16 blokova, Loudness, bitpool 2..53. Ovaj profil kodira zvuk od 44, 1 kHz s bitrateom od 328 kbps.

Parametar Bitpool izravno utječe na bitrate unutar istog profila: što je viši, bitrate je veći, a time i na kvalitetu.

Međutim, bitpool parametar nije vezan za određeni profil. Na brzinu prijenosa značajno utječu i drugi parametri: vrsta audio kanala, broj frekvencijskih opsega, broj audio blokova. Možete povećati bitrate neizravno pregovarajući o nestandardnim profilima, bez izmjene bitpola.

Na primjer, Dual Channel kodira kanale odvojeno, koristeći čitav bitpool za svaki kanal. Prisiljavanje uređaja da koristi dvostruki kanal umjesto Joint Stereo dovest će nam do gotovo udvostručene brzine prijenosa kod istog maksimalnog bitpola, 617 kbps.

Meni se čini da bi bitpool trebao biti interna varijabla. Greška je u dizajnu specifikacija A2DP što vrijednost bitpola nije vezan za ostale parametre kodeka i definiran je samo kao globalna vrijednost.

Te fiksne vrijednosti Bitpola i Bitaka potječu od preporučenih vrijednosti za zvuk visoke kvalitete. Ali preporuka nije izgovor za ograničavanje profila na ove vrijednosti.

Specifikacija A2DP v1.2, koja je bila aktivna od 2007. do 2015., zahtijeva da svi dekoderi ispravno rade s brzinama do 512 kbps:

Dekoder SNK-a mora podržavati sve moguće vrijednosti bitpola koje ne rezultiraju viškom maksimalne brzine bita. Ovaj profil ograničava dostupnu maksimalnu brzinu bita na 320kb / s za mono, i 512kb / s za dvokanalni način rada.

U novoj verziji specifikacije ne postoji ograničenje brzine. Pretpostavlja se da suvremene slušalice izdane nakon 2015. mogu podržati bitrate do 1000 kbps .

Iz nekog razloga, svi trenutno testirani Bluetooth stokovi (Linux (PulseAudio), Android, Blackberry i macOS) imaju umjetna ograničenja maksimalnog parametra bitpola, što izravno utječe na maksimalnu brzinu prijenosa. Ali to nije najveći problem, gotovo sve slušalice također maksimalnu vrijednost bitpola ograničavaju na 53.

Većina uređaja dobro funkcionira na modificiranom Bluetooth stacku s brzinom od 507 kbps, bez prekida i pucanja. No takav se bitrate nikad neće pregovarati u normalnim uvjetima, s dionicama Bluetooth hrpe.

*** Potrebno za testiranje pomoću vodiča ispod: bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso.torrent

Kako se testira na PC-u

Test kompatibilnosti sa slušalicama visokih brzina rada najlakše je izvesti na računalu s Bluetooth adapterom. Pripremio sam Ubuntu sliku s modificiranom Bluetooth snopom, koja se može pokrenuti kao u virtualnom stroju (povezivanjem Bluetooth adaptera kao USB uređaja unutar virtualnog stroja, također radi s adapterima ugrađenim u prijenosna računala) ili pokretanjem s računala USB flash pogon. Ova slika koristi sljedeći profil: Dvostruki kanal, 8 opsega, 16 blokova, Glasnost, bitpool 2..41, 44, 1 kHz, koji omogućuje bitrate od 485 kbps.

Trčanje u VM-u

  • Preuzmite paket za proširenje Virtualbox i Virtualbox: //www.virtualbox.org/wiki/Downloads;
  • Instalirajte Virtualbox, pokrenite ga;
  • Instalirajte paket proširenja pomoću datoteke → Postavke → Proširenja;
  • Napravite novi virtualni stroj: Linux, Ubuntu (64-bitni), 1024 RAM-a. Ne stvarajte HDD.
  • Dođite do postavki virtualnog stroja, u Storage odaberite Controller: IDE, Empty, pritisnite ikonu CD-a → Odaberite datoteku virtualnog optičkog diska;
  • Odaberite preuzetu bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso;
  • Spremite i zatvorite prozor postavki, pokrenite virtualni stroj;
  • Desnom tipkom miša kliknite ikonu USB kabela u donjem desnom kutu, odaberite Bluetooth adapter;

Trčanje na računalu

Slika podržava BIOS / CSM i UEFI dizanje.

  • Snimite sliku na USB flash pogon pomoću Etcher: //etcher.io/. Ova operacija će izbrisati sve postojeće datoteke na USB pogonu.
  • Isključite računalo;
  • Umetnite USB flash pogon, uključite računalo i pritisnite tipku za redoslijed pokretanja (obično Esc ili F12);
  • Odaberite USB flash pogon.

Izvođenje testa

  • (izborno, ali preporučeno) Dvaput kliknite skriptu "Btsnoop Dump" na radnoj površini. Pokrenut će Bluetooth snimanje podataka za kasniju analizu. Ne zatvarajte prozor terminala.
  • Prebacite slušalice u način uparivanja;
  • Kliknite strelicu u gornjem desnom kutu, odaberite ikonu Bluetooth → Bluetooth postavke;
  • Odaberite slušalice, pričekajte da se uparivanje završi i zatvorite prozor;
  • Podesite glasnost Ubuntu-a na oko 2/3. Također smanjite glasnoću pomoću tipki na slušalicama, jer bi nakon upajanja mogli biti vrlo glasni.
  • Otvorite mapu "music", igrajte "testrecord1.flac";
  • (izborno, ali preporučeno) Zatvorite uređaj, zatvorite prozor terminala. Ovo će zaustaviti prikupljanje podataka.
  • (izborno, ali preporučeno) Otvorite preglednik Firefox, prenesite popis podataka (btsnoop_hci.btsnoop na radnu površinu) na //btcodecs.valdikss.org.ru/

Možete slušati drugu glazbu u glazbenoj mapi ili prenijeti svoju vlastitu;

U slušalicama ne bi trebalo biti pucketanja, prekida zvuka ili drugih izobličenja zvuka. Ako čujete kvalitetan zvuk, to znači da vaše slušalice podržavaju zvuk s brzinom prijenosa od 485 kbps.

Kako se testira na Android uređaju

Da biste se testirali na Android pametnom telefonu ili tabletu, morate koristiti modificirani Bluetooth snop, koji zahtijeva root privilegiju.

Kako snimiti Bluetooth kopiju podataka na Androidu

  1. Isključite Bluetooth;
  2. U Postavkama za razvojne programere omogućite preklopku "Omogući Bluetooth HCI zapisnik snoop";
  3. Uključite Bluetooth, spojite se na slušalice pomoću Bluetooth izbornika (ovo je važno! Ne dopuštajte automatsko povezivanje!);
  4. Reproducirajte kratki audio uzorak;
  5. Otvorite postavke programera, onemogućite preklopku "Omogući Bluetooth HCI zapisnik snoop";
  6. Treba stvoriti /storage/emulated/0/btsnoop_hci.log ili /data/misc/bluetooth/logs/btsnoop_hci.log. Ako nedostaje, otvorite /etc/bluetooth/bt_stack.conf s uređivačem teksta i pogledajte put u opciji BtSnoopFileName.

U slušalicama ne bi trebalo biti pucketanja, prekida zvuka ili drugih izobličenja zvuka. Ako čujete kvalitetan zvuk s učvršćenom bibliotekom, to znači da vaše slušalice podržavaju zvuk s brzinom od 512 kbps.

Pažljivo pratite gornji algoritam. Pogotovo, ako isključite slušalice ili isključite nakon uparivanja, važno je ručno povezati slušalice iz Bluetooth postavki, ne dopuštajte automatsko povezivanje!

Uređaji koji podržavaju SBC od najmanje 512 kbit / s

  • 1MORE 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. Odgovorite da ne podržava dvostruki kanal, ali radite ako budete prisiljeni, 462 kbit / s. Ne udovoljava specifikaciji A2DP.)
  • Bluedio T5 (Odgovorite da ne podržava dvostruki kanal, ali radite ako je prisiljen. Ne udovoljava specifikaciji A2DP.)
  • Bluedio T6 (Odgovarajte da ne podržava dvostruki kanal, ali radite ako je prisilno. Ne udovoljava specifikaciji A2DP. Usvojite Max 97220 čip.)
  • Marshall Major II Bluetooth
  • Overdrive RealForce D1
  • Edifikator W830BT
  • DEXP BT-250
  • Logitech BT adapter
  • Noname automobilska glavna jedinica (CSR8645 čip)
  • Automobilska glava Sony DSX-A400BT

Uređaji koji podržavaju SBC veći od 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-opsega)

Uređaji koji ne rade s višim bitrejtima ili dvostrukim kanalom

  1. Harper HB-202 (crackling; Beken BK3256 čip)
  2. Sony Ericsson MW600 (visokofrekventna izobličenja, pucketanje; uređaj iz 2009)

Zašto je ovo važno: SBC 328k i 485k vs aptX

Suprotno uvriježenom mišljenju o aptX kvaliteti zvuka, u nekim slučajevima može proizvesti lošiju kvalitetu zvuka od SBC-a sa standardnom brzinom od 328k.

SBC dinamički dodjeljuje bitove kvantizacije frekvencijskim opsezima, djelujući "odozdo prema gore". Ako se cijela brzina prijenosa koristi za donju i srednju frekvenciju, gornje frekvencije su "odsječene" (prigušene).

aptX kvantizira frekvencijski opseg s istim brojem bitova, što ga čini stalnim kodekom bitrate: 352 kbps za 44, 1 kHz, 384 kbps za 48 kHz. Ne može „prenijeti bitove“ na frekvencije koje su im najviše potrebne. Za razliku od SBC-a, aptX neće "smanjiti" frekvencije, već će im dodati kvantizacijski šum, smanjujući dinamički raspon zvuka i ponekad uvodeći pukotine. SBC, naprotiv, "pojede detalje" - odbacuje najtiša područja.

U prosjeku, u usporedbi sa SBC 328k, aptX stvara manje izobličenja u glazbi sa širokim frekvencijskim rasponom, ali na glazbi s uskim frekvencijskim rasponom i širokim dinamičkim rasponom SBC 328k ponekad pobjeđuje.

Razmotrimo poseban slučaj, glasovirski zapis. Evo spektrograma:

Najviše energije leži u frekvencijama od 0 do 4 kHz, a traje do 10 kHz.

Spektrogram datoteke aptX datoteke izgleda ovako:

Evo SBC 328k:

Može se vidjeti da je SBC 328k periodički potpuno isključio raspon iznad 16 kHz i upotrijebio sve dostupne bitrate za raspone ispod ove vrijednosti. Međutim, aptX je uveo više distorzija u frekvencijski spektar koji ljudsko uho može čuti, što se može vidjeti na oduzetom izvornom spektrogramu iz aptX spektrograma (što je svjetlije, to je više izobličenja):

Dok je SBC 328k uveo manje izobličenja, signal je u rasponu od 0 do 10 kHz, a ostatak je:

Količina 485k za SBC bilo je dovoljno za spremanje čitavog frekvencijskog područja, bez odrezivanja pojaseva.

SBC 485k na ovom je audio uzorku mnogo bolji od aptX-a u rasponu od 0-15 kHz, i s manjom, ali ipak primjetnom razlikom - na 15-22 kHz (tamnije, manje izobličenja):

Prelaskom na SBC s velikim bitrateom, dobit ćete zvuk nadmoćniji od aptX-a većinu vremena u svim slušalicama.

  • original_and_aptx.zip
  • sbc.zip

Kako izmijeniti Bluetooth stog na Androidu 5 - 7

Te bi se izmjene trebale primijeniti na dionice Bluetooth bluetooth Android Bluedroid (Android 5) i Fluoride (Android 6-7). Qualcomm-modificirani snop nije podržan.

Zamijenite zajednički stereo stereo dvostrukim kanalom u standardnoj SBC konfiguraciji

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

Kodirati:

 const 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 * /}; 

Zamijenite A2D_SBC_IE_CH_MD_JOINT s A2D_SBC_IE_CH_MD_DUAL.

Povećajte prioritet dvostrukog kanala

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

Kodirati:

 if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; drugo ako (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; drugo ako (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; drugo ako (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; Pomaknite se ako s A2D_SBC_IE_CH_MD_DUAL na vrh. 
  1. Onemogući ili povećaj ograničenje brzine prijenosa

Android bluetooth stalak ima ne samo ograničenje bitpola, već i ograničenje brzine prijenosa, 328 kbit / s. Ako slušalice podržavaju, na primjer, bitpool 53 za 48 kHz, Android će smanjiti bitpool dolje da bi se uklopio u granicu od 328 kbit / s. To će se dogoditi NAKON pregovaranja s kodekom, u fazi kodiranja, ne uzimajte u obzir vrijednost bitpola u paketu Bluetooth SetCapability.

Android / platforma / vanjski / Bluetooth / bluedroid / btif / src / btif_media_task.c: 172

Kodirati:

 #define DEFAULT_SBC_BITRATE 328 

Zamijenite s 512.

  1. (samo za eksperimente) Onemogući granicu MTU.

Ovo je potrebno za bitrate veće od ~ 580 kbit / s.

btif / src / btif_media_task.c: 174

Kodirati:

 / * 2DH5 korisna nosivost od 679 bajtova - (4 bajta L2CAP zaglavlje + 12 bajta AVDTP zaglavlje) * / #define MAX_2MBPS_AVDTP_MTU 663 

Kako izmijeniti Bluetooth stolove na Androidu 8 - 9

Te izmjene nisu testirane, ali trebale bi funkcionirati.

Dodajte podršku dvostrukog kanala u A2DP SBC izvor

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

Kodirati:

 / * SBC SRC kodek mogućnosti * / statički 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 u ch_mode.

Zamijenite zajednički stereo stereo dvojakim kanalom u zadanoj konfiguraciji

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

Kodirati:

 / * Zadano SBC kodek konfiguracija * / const 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 * /}; 

Zamijenite A2DP_SBC_IE_CH_MD_JOINT s A2DP_SBC_IE_CH_MD_DUAL.

Povećajte prioritet dvostrukog kanala

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

Kodirati:

 statički 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__Dode_m_D_IE_mD_E_DIE_m_D_IE_mD A_DD__DO_E_D_E_D_E_D__DO_DO_M_SD__DOJ_M_D__DO_DO) p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; povratak istinit; } 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; povratak istinit; } 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; povratak istinit; } 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; povratak istinit; } return false; } 

Pomaknite se ako s A2DP_SBC_IE_CH_MD_DUAL na vrh.

Povećajte ograničenje brzine prijenosa

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

Kodirati:

 #define A2DP_SBC_DEFAULT_BITRATE 328 

Zamijenite s 512.

  1. (samo za eksperimente) Onemogući granicu MTU

Ovo je potrebno za bitrate veće od ~ 580 kbit / s.

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

Kodirati:

 #define MAX_2MBPS_AVDTP_MTU 663 

Zakrpljene Bluetooth stope (fleksibilno)

  • 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)). Zip
  • 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
  • zip
  • Le Max 2 Oreo Patched.zip

Zanimljivi Članci