Jak upravit sady Bluetooth v systému Android pro výrazně vylepšenou kvalitu zvuku Bluetooth



Vyzkoušejte Náš Nástroj Pro Odstranění Problémů

Varování: Toto je velmi pokročilý průvodce, který zahrnuje úpravu vašich sad Bluetooth v systému Android - přečtěte si celou tuto příručku a postupujte podle všech pokynů přesně tak, jak jsou uvedeny.



Navzdory skutečnosti, že náhlavní soupravy Bluetooth a zvuk Bluetooth se staly docela populární, je to pro audiofily trochu problém, protože bylo prokázáno, že Bluetooth snižuje kvalitu zvuku, protože se kousky zvukových informací a frekvencí ztrácejí ve vzduchu při streamování Bluetooth.



To je důvod, proč někteří výrobci vydávají kodeky aptX a LDAC, aby zvýšili kvalitu zvuku oproti standardnímu kodeku SBC Bluetooth, který je podporován všemi sluchátky a většinou zařízení Bluetooth - zařízení s kodeky aptX a LDAC jsou však mnohem dražší, protože tyto kodeky požadovat licenční poplatky, které spotřebitel dlouhodobě platí.



Nízká kvalita zvuku kodeku SBC Bluetooth je způsobena umělým omezením všech současných konfigurací Bluetooth a konfigurací sluchátek a toto omezení lze obejít u všech stávajících zařízení.

Pokud vás zajímá zvuk Bluetooth, na konci této příručky vám ukážeme, jak odebrat výpis zvukového protokolu Bluetooth a zkontrolovat jej, abyste zjistili, jakou kvalitu a frekvenci zvuku získáváte z přijímače Bluetooth systému Android.

Většina této příručky se zaměří na několik jednoduchých vylepšení a způsobů, jak číst váš zvukový výstup Bluetooth, což výrazně zvýší kvalitu výstupu standardních kodeků Bluetooth SBC - přečtěte si prosím pozorně celou tuto příručku, protože je poměrně výuková a existuje spousta různých věcí blikat nebo vyladit, v závislosti na modelu vašeho zařízení.



Na tomto konci této příručky je seznam předem opravených zásobníků Bluetooth pro mnoho populárních zařízení se systémem Android - tyto lze při obnovení blikat stejně jako jakýkoli jiný flashovatelný .zip - pokud vám žádné ze zařízení nepatří, budete mít postupujte podle pokynů k úpravě sad Bluetooth v systému Android.

Krátké technické informace o kodeku SBC

SBC má mnoho různých parametrů, které jsou vyjednány během fáze nastavení připojení:

  • Typ a číslo zvukového kanálu: Joint Stereo, Stereo, Dual Channel, Mono;
  • Počet frekvenčních pásem: 4 nebo 8;
  • Počet audio bloků v jednom paketu: 4, 8, 12, 16;
  • Algoritmus kvantitativního přidělování bitů: Hlasitost, SNR;
  • Maximální a minimální bitový fond použitý v procesu kvantování: obvykle 2-53.

Dekodér je povinen podporovat jakoukoli kombinaci těchto parametrů. Kodér může implementovat pouze část z nich.

Stávající sady Bluetooth obvykle vyjednávají následující profil: Joint Stereo, 8 pásem, 16 bloků, Loudness, bitpool 2..53. Tento profil kóduje zvuk 44,1 kHz s datovým tokem 328 kb / s.

Parametr bitpool přímo ovlivňuje datový tok ve stejném profilu: čím vyšší je, tím vyšší je datový tok, a tedy i kvalita.

Parametr bitpool však není vázán na konkrétní profil. Datový tok významně ovlivňují i ​​další parametry: typ zvukového kanálu, počet frekvenčních pásem, počet zvukových bloků. Bitrate můžete nepřímo zvýšit vyjednáním nestandardních profilů, aniž byste měnili bitpool.

Například Dual Channel kóduje kanály samostatně, přičemž pro každý kanál používá celou bitpool. Nucené používání zařízení Dual Channel místo Joint Stereo nám přinese téměř dvojnásobný datový tok při stejném maximálním bitpoolu, 617 kbps.

Pro mě je to pocit, že bitpool by měl být interní proměnnou. Je chybou návrhu specifikace A2DP, že hodnota bitpoolu není vázána na další parametry kodeku a je definována pouze jako globální hodnota.

Tyto pevné hodnoty Bitpool a Bitrate pocházejí z doporučených hodnot pro vysoce kvalitní zvuk. Doporučení však není výmluvou pro omezení profilu na tyto hodnoty.

Specifikace A2DP v1.2, která byla aktivní od roku 2007 do roku 2015, vyžaduje, aby všechny dekodéry správně fungovaly s přenosovými rychlostmi až 512 kb / s:

Dekodér SNK musí podporovat všechny možné hodnoty bitpoolu, které nevedou k překročení maximální bitové rychlosti. Tento profil omezuje dostupnou maximální přenosovou rychlost na 320 kb / s pro mono a 512 kb / s pro dvoukanálové režimy.

V nové verzi specifikace není omezení bitrate. Předpokládá se, že moderní sluchátka vydaná po roce 2015 mohou podporovat přenosové rychlosti až 1 000 kb / s .

Z nějakého důvodu mají všechny aktuálně testované sady Bluetooth (Linux (PulseAudio), Android, Blackberry a macOS) umělá omezení maximálního parametru bitpool, která přímo ovlivňuje maximální datový tok. To však není největší problém, téměř všechna sluchátka také omezují maximální hodnotu bitpoolu na 53.

Většina zařízení funguje dobře na upraveném zásobníku Bluetooth s datovým tokem 507 kb / s, bez přerušení a praskání. Ale takový bitrate nebude nikdy vyjednán za normálních podmínek, se zásobami Bluetooth zásobníků.

*** Vyžadováno pro testování pomocí níže uvedených průvodců: bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso.torrent

Jak testovat na PC

Test kompatibility sluchátek s vysokou přenosovou rychlostí SBC je nejjednodušší provést na PC s adaptérem Bluetooth. Připravil jsem obrázek Ubuntu s upraveným zásobníkem Bluetooth, který lze spustit jako na virtuálním stroji (připojením adaptéru Bluetooth jako zařízení USB uvnitř virtuálního stroje, funguje také s adaptéry zabudovanými do notebooků) nebo bootováním z USB flash disk. Tento obrázek používá následující profil: Dual Channel, 8 pásem, 16 bloků, Loudness, bitpool 2..41, 44,1 kHz, který poskytuje datový tok 485 kbps.

Spuštěno ve virtuálním počítači

  • Stáhněte si balíček Virtualbox a Virtualbox Extension Pack: https://www.virtualbox.org/wiki/Downloads;
  • Nainstalujte Virtualbox, spusťte jej;
  • Nainstalujte Extension Pack pomocí Soubor → Předvolby → Rozšíření;
  • Vytvořte nový virtuální stroj: Linux, Ubuntu (64bitový), 1024 RAM. Nevytvářejte HDD.
  • Přejděte na nastavení virtuálního počítače, v části Úložiště vyberte Řadič: IDE, Prázdný, stiskněte ikonu CD → Vyberte soubor virtuálního optického disku;
  • Vyberte stažený bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso;
  • Uložit a zavřít okno nastavení, spustit virtuální stroj;
  • Klepněte pravým tlačítkem myši na ikonu kabelu USB vpravo dole, vyberte adaptér Bluetooth;

Běží na PC

Obrázek podporuje bootování BIOS / CSM a UEFI.

  • Vypálit obrázek na USB flash disk pomocí Etcher: https://etcher.io/. Tato operace odstraní všechny existující soubory na jednotce USB.
  • Vypněte počítač;
  • Vložte USB flash disk, zapněte počítač a stiskněte tlačítko pořadí zavádění (obvykle Esc nebo F12);
  • Vyberte jednotku USB flash.

Provedení testu

  • (volitelné, ale doporučeno) Poklepejte na skript „Btsnoop Dump“ na ploše. Spustí se sběr dat Bluetooth pro pozdější analýzu. Nezavírejte okno terminálu.
  • Přepněte sluchátka do režimu párování;
  • Klikněte na šipku v pravém horním rohu, vyberte ikonu Bluetooth → Nastavení Bluetooth;
  • Vyberte si sluchátka, počkejte na dokončení párování a zavřete okno;
  • Nastavte hlasitost Ubuntu na přibližně 2/3. Snižte také hlasitost pomocí tlačítek náhlavní soupravy, protože po spárování může být velmi hlasitá.
  • Otevřete složku „music“, přehrajte „testrecord1.flac“;
  • (volitelně, ale doporučeno) Zavřít přehrávač, zavřít okno terminálu. Tím se zastaví sběr dat.
  • (volitelné, ale doporučeno) Otevřete prohlížeč Firefox, nahrajte výpis dat (btsnoop_hci.btsnoop na plochu) na https://btcodecs.valdikss.org.ru/

Můžete poslouchat jinou hudbu ve složce hudby nebo nahrát vlastní;

Ve sluchátkách by nemělo docházet k praskání, přerušení zvuku nebo jinému zkreslení zvuku. Pokud uslyšíte kvalitní zvuk, znamená to, že vaše sluchátka podporují zvuk s přenosovou rychlostí 485 kb / s.

Jak testovat na zařízení Android

Chcete-li testovat ze smartphonu nebo tabletu Android, musíte použít upravený Bluetooth stack, který vyžaduje oprávnění root.

Jak zachytit výpis dat Bluetooth v systému Android

  1. Vypněte Bluetooth;
  2. V Nastavení vývojáře povolte přepínač „Povolit protokol Bluetooth HCI snoop“;
  3. Zapněte Bluetooth, připojte se k náhlavní soupravě pomocí nabídky Bluetooth (to je důležité! Nepovolit automatické připojení!);
  4. Přehrát krátkou ukázku zvuku;
  5. Otevřete nastavení vývojáře, deaktivujte přepínač „Povolit protokol Bluetooth HCI snoop“;
  6. Měl by být vytvořen /storage/emulated/0/btsnoop_hci.log nebo /data/misc/bluetooth/logs/btsnoop_hci.log. Pokud chybí, otevřete /etc/bluetooth/bt_stack.conf pomocí textového editoru a podívejte se na cestu v možnosti BtSnoopFileName.

Ve sluchátkách by nemělo docházet k praskání, přerušení zvuku nebo jinému zkreslení zvuku. Pokud uslyšíte kvalitní zvuk s opravenou knihovnou, znamená to, že vaše sluchátka podporují zvuk s přenosovou rychlostí 512 kb / s.

Pečlivě prosím dodržujte výše uvedený algoritmus. Zvláště pokud vypnete sluchátka nebo se po spárování odpojíte, je důležité se ke sluchátkům připojit ručně z nastavení Bluetooth, nepovolujte automatické připojení!

Zařízení, která podporují alespoň 512 kbit / s SBC

  • 1 VÍCE 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. Reagujte na to, že nepodporujete Dual Channel, ale pracujte, pokud je vynucený, 462 kbit / s. Nevyhovuje specifikaci A2DP.)
  • Bluedio T5 (Reaguje na to, že nepodporuje Dual Channel, ale funguje, pokud je vynucen. Nevyhovuje specifikaci A2DP.)
  • Bluedio T6 (Reaguje na to, že nepodporuje Dual Channel, ale funguje, pokud je vynucen. Nevyhovuje specifikaci A2DP. Přijměte čip Max 97220.)
  • Marshall Major II Bluetooth
  • Overdrive RealForce D1
  • Editátor W830BT
  • DEXP BT-250
  • Adaptér Logitech BT
  • Noname automobilová hlavní jednotka (čip CSR8645)
  • Hlavní automobilová jednotka Sony DSX-A400BT

Zařízení, která podporují SBC vyšší než 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, dvoukanálový, 4 dílčí pásma)

Zařízení, která nepracují s vyššími přenosovými rychlostmi nebo se dvěma kanály

  1. Harper HB-202 (praskání; čip Beken BK3256)
  2. Sony Ericsson MW600 (vysokofrekvenční zkreslení, praskání; zařízení z roku 2009)

Proč je to důležité: SBC 328k a 485k vs aptX

Na rozdíl od všeobecného přesvědčení o kvalitě zvuku aptX může v některých případech produkovat horší kvalitu zvuku než SBC se standardním datovým tokem 328 kB.

SBC dynamicky alokuje kvantizační bity pro kmitočtová pásma a jedná na principu „zdola nahoru“. Pokud byl pro dolní a střední kmitočty použit celý datový tok, horní frekvence jsou „oříznuty“ (umlčeny).

aptX neustále kvantifikuje frekvenční pásma se stejným počtem bitů, což z něj činí kodek s konstantní bitrate: 352 kb / s pro 44,1 kHz, 384 kb / s pro 48 kHz. Nemůže „přenášet bity“ na frekvence, které jsou v nich většinou potřebné. Na rozdíl od SBC nebude aptX „snižovat“ frekvence, ale přidá k nim kvantovací šum, sníží dynamický rozsah zvuku a někdy zavede praskání. SBC naopak „jí detaily“ - zahodí nejtišší oblasti.

V průměru ve srovnání s SBC 328k aptX méně zkresluje hudbu se širokým frekvenčním rozsahem, ale u hudby s úzkým frekvenčním rozsahem a širokým dynamickým rozsahem někdy vyhrává SBC 328k.

Zvažme speciální případ, nahrávku na klavír. Zde je spektrogram:


Nejvíce energie spočívá ve frekvencích 0-4 kHz a trvá až 10 kHz.
Spektrogram souboru aptX vypadá takto:

Zde je SBC 328k:

Je vidět, že SBC 328k periodicky zcela přerušil rozsah nad 16 kHz a používal všechny dostupné bitové rychlosti pro rozsahy pod touto hodnotou. AptX však zavedl více zkreslení do frekvenčního spektra slyšitelného lidským uchem, což lze vidět na odečteném původním spektrogramu od spektrogramu aptX (čím jasnější, tím více zkreslení):


Zatímco SBC 328k zavedl menší zkreslení signálu v rozsahu od 0 do 10 kHz a zbytek byl:

Bitrate 485k pro SBC stačil k uložení celého frekvenčního rozsahu, aniž by došlo k odříznutí pásem.

SBC 485k na tomto zvukovém vzorku je mnohem lepší než aptX v rozsahu 0-15 kHz as menším, ale stále znatelným rozdílem - na 15-22 kHz (čím tmavší, tím menší zkreslení):

Přepnutím na vysokorychlostní SBC získáte většinou zvuk lepší než aptX na jakýchkoli sluchátkách.

  • original_and_aptx.zip
  • sbc.zip

Jak upravit sady Bluetooth v systému Android 5 - 7

Tyto úpravy by měly být aplikovány na zásobníky Android bluetooth zásobníky Bluedroid (Android 5) a Fluoride (Android 6-7). Zásobník upravený společností Qualcomm není podporován.

Vyměňte Joint Stereo za Dual Channel ve standardní konfiguraci SBC

Android / platforma / externí / bluetooth / bluedroid / btif / co / bta_av_co.c: 99

Kód:

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

Vyměňte A2D_SBC_IE_CH_MD_JOINT za A2D_SBC_IE_CH_MD_DUAL.

Zvyšte prioritu dvou kanálů

Android / platforma / externí / bluetooth / bluedroid / btif / co / bta_av_co.c: 41

Kód:

if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; Přesuňte se s A2D_SBC_IE_CH_MD_DUAL nahoru.
  1. Zakažte nebo zvyšte omezení bitrate

Android bluetooth stack má nejen limit bitpoolu, ale také limit bitrate, 328 kbit / s. Pokud sluchátka podporují například bitpool 53 pro 48 kHz, Android sníží bitpool tak, aby se vešel do limitu 328 kbit / s. K tomu dojde PO VYJEDNÁVÁNÍ kodeků, ve fázi kódování, nezohledněte hodnotu bitpoolu v paketu Bluetooth SetCapabilities.

Android / platforma / externí / bluetooth / bluedroid / btif / src / btif_media_task.c: 172

Kód:

#define DEFAULT_SBC_BITRATE 328

Vyměňte za 512.

  1. (pouze pro experimenty) Zakázat limit MTU.

To je vyžadováno pro bitrate vyšší než ~ 580 kbit / s.

btif / src / btif_media_task.c: 174

Kód:

/ * 2DH5 velikost užitečného zatížení 679 bajtů - (4 bajty záhlaví L2CAP + 12 bajtů záhlaví AVDTP) * / #define MAX_2MBPS_AVDTP_MTU 663

Jak upravit sady Bluetooth v systému Android 8 - 9

Tyto úpravy nebyly testovány, ale měly by fungovat.

Přidejte podporu Dual Channel do zdroje A2DP SBC

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

Kód:

/ * Možnosti kodeku SBC SRC * / static const tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_BLOCKS_8;

přidat A2DP_SBC_IE_CH_MD_DUAL v ch_mode.

Ve výchozím nastavení nahraďte Joint Stereo Dual Channel

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

Kód:

/ * Výchozí SBC kodek konfigurace * / 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 * /};

Vyměňte A2DP_SBC_IE_CH_MD_JOINT za A2DP_SBC_IE_CH_MD_DUAL.

Zvyšte prioritu dvou kanálů

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

Kód:

static 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_result-> ch_mode => ch_mode => p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; návrat true; } 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; návrat true; } 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; návrat true; } 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; návrat true; } vrátit false; }

Přesuňte se s A2DP_SBC_IE_CH_MD_DUAL nahoru.

Zvyšte limit bitrate

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

Kód:

#define A2DP_SBC_DEFAULT_BITRATE 328

Vyměňte za 512.

  1. (pouze pro experimenty) Zakázat limit MTU

To je vyžadováno pro bitrate vyšší než ~ 580 kbit / s.

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

Kód:

#define MAX_2MBPS_AVDTP_MTU 663

Patched Bluetooth Stacks (Flashable)

  • 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
  • zip
  • Le Max 2 Oreo Patched.zip
10 minut čtení