Kako spremeniti skladbe Bluetooth v Androidu za močno izboljšano kakovost zvoka Bluetooth



Preizkusite Naš Instrument Za Odpravo Težav

Opozorilo: To je zelo napreden priročnik, ki vključuje spreminjanje vaših nizov Bluetooth v Androidu - preberite ta priročnik v celoti in natančno sledite navodilom.



Kljub temu, da so slušalke Bluetooth in zvok Bluetooth postali zelo priljubljeni, to za avdiofile predstavlja malo težav, saj Bluetooth dokazano zmanjšuje kakovost zvoka, saj se delci zvočnih informacij in frekvence izgubijo v zraku zaradi pretakanja Bluetooth.



Zato nekateri proizvajalci ponujajo kodeke aptX in LDAC, da bi izboljšali kakovost zvoka v primerjavi s standardnim kodekom SBC Bluetooth, ki ga podpirajo vse slušalke in večina naprav Bluetooth - vendar so naprave s kodeki aptX in LDAC veliko dražje, ker so ti kodeki zahtevajo licenčnine, ki jih potrošnik dolgoročno plača.



Nizko kakovost zvoka kodeka SBC Bluetooth povzročajo umetne omejitve vseh trenutnih nizov Bluetooth in konfiguracije slušalk, ki jih je mogoče izogniti na vseh obstoječih napravah.

Če vas zanima zvok Bluetooth, vam bomo na koncu tega vodnika prikazali, kako narediti izpis zvočnega zapisa Bluetooth in ga pregledati, da vidite, kakšno kakovost zvoka in frekvenco dobite iz Androidovega sprejemnika Bluetooth.

Večina tega priročnika se bo osredotočila na nekaj preprostih sprememb in načinov branja zvočnega izhoda Bluetooth, da bi močno izboljšali kakovost izhoda standardnih kodekov SBC Bluetooth - natančno preberite celoten priročnik, saj je zelo poučen in obstaja veliko različnih stvari utripati ali prilagoditi, odvisno od modela vaše naprave.



Na tem koncu tega vodnika je seznam vnaprej popravljenih nizov Bluetooth za številne priljubljene naprave Android - te je mogoče obnoviti, kot bi to storila katera koli druga bliskovita .zip - če nobena od naprav ne pripada vam, boste imeli slediti navodilom za spreminjanje nizov Bluetooth v Androidu.

Kratke tehnične informacije o kodeku SBC

SBC ima veliko različnih parametrov, o katerih se dogovorijo v fazi nastavitve povezave:

  • Vrsta in številka zvočnega kanala: Skupni stereo, stereo, dvokanalni, mono;
  • Število frekvenčnih pasov: 4 ali 8;
  • Število zvočnih blokov v enem paketu: 4, 8, 12, 16;
  • Algoritem za dodelitev bitov za kvantizacijo: Glasnost, SNR;
  • Največje in najmanjše področje bitov, uporabljeno v postopku kvantizacije: običajno 2-53.

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

Obstoječi svežnji Bluetooth običajno dosegajo naslednji profil: Skupni stereo, 8 pasov, 16 blokov, Glasnost, bitpool 2..53. Ta profil kodira zvok 44,1 kHz z bitno hitrostjo 328 kbps.

Parameter Bitpool neposredno vpliva na bitno hitrost v istem profilu: višja kot je, večja je bitna hitrost in s tem kakovost.

Vendar parameter bitpool ni vezan na določen profil. Na bitno hitrost pomembno vplivajo tudi drugi parametri: vrsta zvočnega kanala, število frekvenčnih pasov, število zvočnih blokov. Bitno hitrost lahko povečate posredno s pogajanji o nestandardnih profilih, ne da bi spremenili bitovno bazo.

Na primer, Dual Channel kodira kanale ločeno, pri čemer za vsak kanal uporablja celoten bitpool. Če prisilimo napravo, da namesto Joint Stereo uporablja dvojni kanal, bomo dobili skoraj podvojeno bitno hitrost pri enaki največji bitni skupini, 617 kbps.

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

Te fiksne vrednosti Bitpool in Bitrate izvirajo iz priporočenih vrednosti za visokokakovosten zvok. Toda priporočilo ni izgovor za omejitev profila na te vrednosti.

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

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

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

Iz neznanega razloga imajo vsi trenutno preizkušeni svežnji Bluetooth (Linux (PulseAudio), Android, Blackberry in macOS) umetne omejitve največjega bitnega parametra, kar neposredno vpliva na največjo bitno hitrost. A to ni največji problem, skoraj vse slušalke omejujejo tudi največjo vrednost bitpola na 53.

Večina naprav dobro deluje na spremenjenem svežnju Bluetooth z bitno hitrostjo 507 kbps, brez prekinitev in praskanja. Toda takšna bitna hitrost se v običajnih pogojih nikoli ne bo izpogajala z osnovnimi skladi Bluetooth.

*** Potrebno za testiranje z uporabo spodnjih vodnikov: bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso.torrent

Kako preizkusiti na računalniku

Preskus združljivosti slušalk SBC z visoko bitno hitrostjo je v računalniku najlažje izvesti z vmesnikom Bluetooth. Pripravil sem sliko Ubuntuja s spremenjenim skladom Bluetooth, ki ga je mogoče zagnati kot v navideznem računalniku (tako, da vmesnik Bluetooth povežete kot napravo USB znotraj navideznega računalnika, deluje tudi z adapterji, vgrajenimi v prenosnike) ali z zagonom iz pogon USB. Ta slika uporablja naslednji profil: dvokanalni, 8 pasov, 16 blokov, glasnost, bitpool 2..41, 44,1 kHz, ki zagotavlja bitno hitrost 485 kbps.

Zagon v VM

  • Prenesite Virtualbox in Virtualbox Extension Pack: https://www.virtualbox.org/wiki/Downloads;
  • Namestite Virtualbox, zaženite ga;
  • Namestite razširitveni paket s pomočjo Datoteka → Nastavitve → Razširitve;
  • Ustvarite nov navidezni stroj: Linux, Ubuntu (64-bitni), 1024 RAM-a. Ne ustvarjajte trdega diska.
  • Pomaknite se do nastavitev navideznega stroja, v pomnilniku 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;
  • Shranite in zaprite okno z nastavitvami, zaženite navidezni stroj;
  • Z desno miškino tipko kliknite ikono kabla USB v spodnjem desnem kotu in izberite vmesnik Bluetooth;

Zagon v računalniku

Slika podpira zagon BIOS / CSM in UEFI.

  • Sliko zapišite na pomnilniški ključek USB z Etcher: https://etcher.io/. S tem postopkom boste izbrisali vse obstoječe datoteke na pogonu USB.
  • Izklopite računalnik;
  • Vstavite bliskovni pogon USB, vklopite računalnik in pritisnite gumb za zaporedje zagona (običajno Esc ali F12);
  • Izberite pogon USB.

Izvajanje testa

  • (neobvezno, vendar priporočljivo) Na namizju dvokliknite skript »Btsnoop Dump«. Začel bo zajem podatkov Bluetooth za poznejšo analizo. Ne zapirajte okna terminala.
  • Preklopite slušalke v način seznanjanja;
  • Kliknite 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 Ubuntuja na približno 2/3. Zmanjšajte glasnost tudi z gumbi na slušalkah, saj je lahko po seznanjanju zelo glasna.
  • 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 izpis podatkov (btsnoop_hci.btsnoop na namizju) na https://btcodecs.valdikss.org.ru/

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

V slušalkah ne sme biti praskanja, prekinitve zvoka ali drugega izkrivljanja zvoka. Če slišite dober visokokakovosten zvok, to pomeni, da vaše slušalke podpirajo zvok z bitno hitrostjo 485 kbps.

Kako preizkusiti na napravi Android

Za preskušanje iz pametnega telefona ali tabličnega računalnika Android morate uporabiti spremenjeni sklad Bluetooth, ki zahteva root privilegij.

Kako zajeti izpis podatkov Bluetooth v Androidu

  1. Izklopite Bluetooth;
  2. V nastavitvah za razvijalce omogočite stikalo »Enable Bluetooth HCI snoop log«;
  3. Vklopite Bluetooth, povežite se s slušalkami prek menija Bluetooth (to je pomembno! Ne dovolite samodejne povezave!);
  4. Predvajanje kratkega zvočnega vzorca;
  5. Odprite nastavitve za razvijalce, onemogočite stikalo »Omogoči dnevnik Bluetooth HCI snoop«;
  6. Ustvariti bi morali /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 si oglejte pot v možnosti BtSnoopFileName.

V slušalkah ne sme biti praskanja, prekinitve zvoka ali drugega izkrivljanja zvoka. Če s popravljeno knjižnico slišite dober visokokakovosten zvok, to pomeni, da vaše slušalke podpirajo zvok z bitno hitrostjo 512 kbps.

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

Naprave, ki podpirajo najmanj 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. Odgovorite, da ne podpira Dual Channel, vendar delujte, če je prisiljen, 462 kbit / s. Ni v skladu s specifikacijami A2DP.)
  • Bluedio T5 (odgovorite, da ne podpira dvojnega kanala, vendar delujte, če je prisiljen. Ni v skladu s specifikacijami A2DP.)
  • Bluedio T6 (odgovorite, da ne podpira dvojnega kanala, vendar delujte, če ste prisiljeni. Ne ustreza specifikaciji A2DP. Sprejem čipa Max 97220.)
  • Marshall Major II Bluetooth
  • Overdrive RealForce D1
  • Edifier W830BT
  • DEXP BT-250
  • Logitech BT adapter
  • Noname avtomobilska glavna enota (čip CSR8645)
  • Avtomobilska glavna enota Sony DSX-A400BT

Naprave, ki podpirajo SBC več kot 512 kbit / s

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

Naprave, ki ne delujejo z večjimi bitnimi hitrostmi ali dvojnim kanalom

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

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

V nasprotju s splošnim prepričanjem o kakovosti zvoka aptX lahko v nekaterih primerih proizvede slabšo kakovost zvoka kot SBC s standardno bitno hitrostjo 328 k.

SBC dinamično dodeli bitov kvantizacije za frekvenčne pasove, ki delujejo od spodaj navzgor. Če je bila celotna bitna hitrost uporabljena za spodnjo in srednjo frekvenco, so zgornje frekvence 'odrezane' (utišane).

aptX nenehno kvantizira frekvenčne pasove z enakim številom bitov, zaradi česar je kodek konstantne bitne hitrosti: 352 kbps za 44,1 kHz, 384 kbps za 48 kHz. Ne more 'prenašati bitov' na frekvence, ki so večinoma potrebne v njih. Za razliko od SBC, aptX ne bo 'rezal' frekvenc, temveč jim bo dodal kvantizacijski šum, zmanjšal dinamični razpon zvoka in včasih uvedel prasketanje. SBC, nasprotno, 'poje podrobnosti' - zavrže najtišja območja.

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

Poglejmo si poseben primer, posnetek klavirja. Tu je spektrogram:


Največ energije imajo frekvence 0-4 kHz in trajajo do 10 kHz.
Spektrogram datoteke aptX je videti takole:

Tu je SBC 328k:

Vidimo lahko, da je SBC 328k občasno popolnoma odrezal obseg nad 16 kHz in uporabil vse razpoložljive bitne hitrosti za območja pod to vrednostjo. Vendar pa je aptX v frekvenčni spekter, ki ga sliši človeško uho, vnesel več popačenj, kar je razvidno na odštetem originalnem spektrogramu iz spektrograma aptX (svetlejše, več popačenja):


Medtem ko je SBC 328k uvedel manj popačenja, je signal v območju od 0 do 10 kHz, ostalo pa je bilo:

Bitrate 485k za SBC je bil dovolj, da je prihranil celotno frekvenčno območje, ne da bi odrezal pasove.

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

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

  • original_and_aptx.zip
  • sbc.zip

Kako spremeniti nabore Bluetooth v Androidu 5 - 7

Te spremembe je treba uporabiti za zaloge Android bluetooth skladov Bluedroid (Android 5) in Fluoride (Android 6-7). Spremenjeni Qualcomm sklad ni podprt.

Zamenjajte Joint Stereo z Dual Channel v standardni konfiguraciji SBC

android / platforma / zunanja / 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 * /};

Zamenjajte A2D_SBC_IE_CH_MD_JOINT z A2D_SBC_IE_CH_MD_DUAL.

Povečajte prednost dvokanalnega

android / platforma / zunanja / bluetooth / bluedroid / btif / co / bta_av_co.c: 41

Koda:

če (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; sicer če (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; sicer če (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; sicer če (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; Premakni, če je z A2D_SBC_IE_CH_MD_DUAL na vrh.
  1. Onemogočite ali povečajte omejitev bitne hitrosti

Androidov sklad Bluetooth nima samo omejitve bitpola, temveč tudi omejitev hitrosti, 328 kbit / s. Če slušalke na primer podpirajo bitpool 53 za 48 kHz, bo Android zmanjšal bitpool navzdol, da se bo omejil na 328 kbit / s. To se bo zgodilo PO pogajanjih o kodekih, na stopnji kodiranja pa v paketu Bluetooth SetCapabilities ne upošteva vrednosti bitpola.

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

Koda:

#define DEFAULT_SBC_BITRATE 328

Zamenjajte s 512.

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

To je potrebno za bitne hitrosti nad ~ 580 kbit / s.

btif / src / btif_media_task.c: 174

Koda:

/ * Velikost koristnega tovora 2DH5 679 bajtov - (4 bajta L2CAP Glava + 12 bajtov AVDTP Glava) * / #define MAX_2MBPS_AVDTP_MTU 663

Kako spremeniti skladbe Bluetooth v Androidu 8 - 9

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

Dvokanalno podporo dodajte v vir A2DP SBC

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

Koda:

/ * Zmožnosti kodeka SBC SRC * / statična const tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_BLOCKS_8;

dodajte A2DP_SBC_IE_CH_MD_DUAL v ch_mode.

Zamenjajte Joint Stereo z Dual Channel v privzeti nastavitvi

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

Zamenjajte A2DP_SBC_IE_CH_MD_JOINT z A2DP_SBC_IE_CH_MD_DUAL.

Povečajte prednost dvokanalnega

/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_resBC; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; vrni res; } če (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; vrni res; } če (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; vrni res; } če (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; vrni res; } vrne false; }

Premakni, če je z A2DP_SBC_IE_CH_MD_DUAL na vrh.

Povečajte omejitev bitne hitrosti

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

Koda:

#define A2DP_SBC_DEFAULT_BITRATE 328

Zamenjajte s 512.

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

To je potrebno za bitne hitrosti nad ~ 580 kbit / s.

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

Koda:

#define MAX_2MBPS_AVDTP_MTU 663

Popravljeni svežnji Bluetooth (bliskavice)

  • 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 global 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
10 minut branja