Jak upravit sady Bluetooth na Androidu pro výrazně vylepšenou kvalitu zvuku Bluetooth

Upozornění: Jedná se o vysoce pokročilého průvodce, který zahrnuje úpravu vašich zásobníků Bluetooth v systému Android - přečtěte si celou tuto příručku a postupujte podle všech pokynů přesně podle uvedených pokynů.

Navzdory skutečnosti, že náhlavní soupravy Bluetooth a Bluetooth audio se staly velmi 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í ztratí ve vzduchu přes Bluetooth.

To je důvod, proč někteří výrobci uvádějí 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 kodekem aptX a LDAC jsou však mnohem dražší, protože tyto kodeky vyžadují 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 souprav a sluchátek a toto omezení lze obejít na jakémkoli existujícím zařízení.

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

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, aby se výrazně zvýšila kvalita výstupu standardních kodeků SBC Bluetooth - přečtěte si pozorně celý tento návod, protože je velmi vzdělávací, a existuje spousta různých věcí blikáním nebo vyladěním v závislosti na modelu vašeho zařízení.

Na tomto konci této příručky je seznam předpřipravených souprav Bluetooth pro mnoho populárních zařízení s Androidem - tato mohou být obnovena jako při jakémkoli jiném flashovatelném .zip - pokud žádné z vašich 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 dohodnuty během fáze nastavení připojení:

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

Dekodér je vyžadován pro podporu jakékoli kombinace těchto parametrů. Kodér může implementovat pouze část z nich.

Stávající Bluetooth stacky 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 kbps.

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

Parametr bitpool však není vázán na konkrétní profil. Datový tok je také významně ovlivněn dalšími parametry: typ zvukového kanálu, počet frekvenčních pásem, počet zvukových bloků. Přenosovou rychlost můžete nepřímo zvýšit vyjednáváním nestandardních profilů, aniž byste změnili bitpool.

Například duální kanál kóduje kanály samostatně, přičemž pro každý kanál používá celou bitovou oblast. Přinutí-li zařízení používat duální kanál namísto společného stereofonního systému, získá nás téměř zdvojnásobený datový tok při stejném maximálním bitpoolu, 617 kbps.

Mám pocit, že bitpool by měl být vnitřní proměnnou. Je to chyba návrhu specifikace A2DP, že hodnota bitpoolu není vázána na jiné 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í omluvou omezit profil 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 datovými toky až 512 kb / s:

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

V nové verzi specifikace neexistuje žádná bitrate omezení. Předpokládá se, že moderní sluchátka vydaná po roce 2015 mohou podporovat datový tok až 1 000 kb / s .

Z nějakého důvodu mají všechny v současné době testované sady Bluetooth (Linux (PulseAudio), Android, Blackberry a MacOS) umělá omezení parametru maximum bitpool, což 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 bitpool na 53.

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

*** Vyžaduje se 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 SBC s vysokou bitovou rychlostí je nejjednodušší provést na počítači pomocí adaptéru Bluetooth. Připravil jsem obrázek Ubuntu s upraveným stackem Bluetooth, který lze spustit jako ve virtuálním stroji (připojením adaptéru Bluetooth jako zařízení USB uvnitř virtuálního počítače, také pracuje s adaptéry zabudovanými do notebooků) nebo zavedení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.

Běží ve VM

  • Stáhněte si Virtualbox a Virtualbox Extension Pack: //www.virtualbox.org/wiki/Downloads;
  • Nainstalujte Virtualbox, spusťte jej;
  • Nainstalujte Extension Pack pomocí File → Preferences → Extensions;
  • Vytvořte nový virtuální stroj: Linux, Ubuntu (64-bit), 1024 RAM. Nevytvářejte pevný disk.
  • Přejděte do nastavení virtuálního stroje, v úložišti vyberte Řadič: IDE, Prázdný, stiskněte ikonu CD → Zvolte soubor virtuálního optického disku;
  • Vyberte stažené bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso;
  • Uložte a zavřete okno nastavení, spusťte virtuální počítač;
  • Klepněte pravým tlačítkem myši na ikonu kabelu USB v pravém dolním rohu a vyberte adaptér Bluetooth;

Běží na PC

Obrázek podporuje zavedení systému BIOS / CSM a UEFI.

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

Provádění testu

  • (volitelné, ale doporučené) Poklepejte na skript „Btsnoop Dump“ na ploše. Spustí 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 → Bluetooth Settings;
  • Vyberte si sluchátka, počkejte, až se párování dokončí, a zavřete okno;
  • Nastavte objem Ubuntu přibližně na 2/3. Snižte hlasitost pomocí tlačítek náhlavní soupravy, protože po spárování může být velmi hlasitá.
  • Otevřete složku „music“ a zahrajte „testrecord1.flac“;
  • (volitelné, ale doporučeno) Zavřete přehrávač, zavřete okno terminálu. Tím se zastaví sběr dat.
  • (volitelné, ale doporučeno) Spusťte prohlížeč Firefox, nahrajte výpis dat (btsnoop_hci.btsnoop na ploše) na //btcodecs.valdikss.org.ru/

Můžete poslouchat další hudbu ve složce s hudbou nebo nahrát vlastní;

Ve sluchátkách by neměly být žádné praskliny, přerušování zvuku ani jiné zkreslení zvuku. Pokud uslyšíte kvalitní vysoce kvalitní zvuk, znamená to, že vaše sluchátka podporují zvuk s bitovou rychlostí 485 kbps.

Jak vyzkoušet na zařízení Android

Chcete-li testovat ze smartphonu nebo tabletu Android, musíte použít upravený zásobník Bluetooth, 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 a vypněte 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ěly být žádné praskliny, přerušování zvuku ani jiné zkreslení zvuku. Pokud s opravenou knihovnou uslyšíte kvalitní vysoce kvalitní zvuk, znamená to, že vaše sluchátka podporují zvuk s bitovou rychlostí 512 kbps.

Pečlivě dodržujte výše uvedený algoritmus. Zejména pokud vypnete sluchátka nebo se po spárování odpojíte, je důležité se k nim připojit ručně pomocí nastavení Bluetooth, neumožňují automatické připojení!

Zařízení podporující nejméně 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 nepodporuje duální kanál, ale pracujte, pokud je vynucený, 462 kbit / s. Neshoduje se specifikací A2DP.)
  • Bluedio T5 (Reakce nepodporuje duální kanál, ale funguje, pokud je vynucený. Neshoduje se specifikací A2DP.)
  • Bluedio T6 (Reagujte na to, že nepodporuje duální kanál, ale pracujte, pokud je vynuceno. Není v souladu se specifikací 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)
  • Sony DSX-A400BT automobilová hlavní jednotka

Zařízení podporující 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, duální kanál, 4 dílčí pásma)

Zařízení, která nepracují s vyššími datovými toky nebo duálním kanálem

  1. Harper HB-202 (krakování; čip Beken BK3256)
  2. Sony Ericsson MW600 (vysokofrekvenční zkreslení, praskliny; zařízení od 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, v některých případech to může produkovat horší kvalitu zvuku než SBC se standardním 328k bitrate.

SBC dynamicky přiděluje kvantizační bity pro kmitočtová pásma a působí na základě „zdola nahoru“. Pokud byl celý bitrate použit pro dolní a střední frekvenci, jsou horní frekvence „odříznuty“ (umlčeny).

aptX neustále kvantuje frekvenční pásma se stejným počtem bitů, což z něj činí kodek s konstantním datovým tokem: 352 kbps pro 44, 1 kHz, 384 kbps pro 48 kHz. Nemůže „přenášet bity“ na frekvence, které jsou v nich většinou potřeba. Na rozdíl od SBC, aptX nebude „snižovat“ frekvence, ale bude jim přidávat kvantizační šum, čímž se sníží dynamický rozsah zvuku a někdy zavedou praskliny. SBC naopak „jí detaily“ - zahodí nejtišší oblasti.

V porovnání s SBC 328k činí aptX v průměru méně zkreslení hudby s širokým frekvenčním rozsahem, ale u hudby s úzkým frekvenčním rozsahem a širokým dynamickým rozsahem SBC 328k někdy vyhraje.

Uvažujme zvláštní případ, klavírní nahrávku. Zde je spektrogram:

Nejvíce energie leží ve frekvencích 0-4 kHz a vydrží až 10 kHz.

Spektrogram souboru aptX vypadá takto:

Zde je SBC 328k:

Je vidět, že SBC 328k periodicky zcela odřízl rozsah nad 16 kHz a použil všechny dostupné datové toky pro rozsahy pod touto hodnotou. AptX však zavedl do kmitočtového spektra slyšitelného lidským uchem více zkreslení, které lze vidět na odečteném původním spektrogramu od spektroskopu aptX (světlejší, tím větší zkreslení):

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

Bitrate 485k pro SBC stačilo k uložení celého kmitočtového rozsahu bez odříznutí pásem.

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

Přechodem na vysokorychlostní SBC získáte zvuk nadřazený aptX po většinu času na všech 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 použity na zásobní zásobníky bluetooth pro Android Bluedroid (Android 5) a Fluoride (Android 6-7). Zásobník Qualcomm Modified není podporován.

Nahraďte Joint Stereo 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 * /}; 

Nahraďte A2D_SBC_IE_CH_MD_JOINT za A2D_SBC_IE_CH_MD_DUAL.

Zvyšte prioritu duálního kanálu

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

Kód:

 if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; jinak if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; jinak if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; jinak if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; Pohybujte se, pokud s A2D_SBC_IE_CH_MD_DUAL nahoru. 
  1. Zakázat nebo zvýšit omezení datového toku

Android bluetooth stack má nejen limit bitpool, ale také bitrate limit, 328 kbit / s. Pokud sluchátka podporují například bitpool 53 pro 48 kHz, Android sníží bitpool dolů, aby se vešel do limitu 328 kbit / s. To se stane po vyjednávání kodeků ve fázi kódování, nebere v úvahu bitovou hodnotu v paketu Bluetooth SetCapabilities.

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

Kód:

 #define DEFAULT_SBC_BITRATE 328 

Nahraďte jej 512.

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

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

btif / src / btif_media_task.c: 174

Kód:

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

Jak upravit Bluetooth Stohy na Android 8 - 9

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

Přidejte podporu duálního kanálu do zdroje A2DP SBC

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

Kód:

 / * SBC SRC kodekové schopnosti * / statický const tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_SAMP_FREQ_44, / * samp_freq * / (A2DP_SBC_IE_CH_MD_MONO; 

přidat A2DP_SBC_IE_CH_MD_DUAL v ch_mode.

Nahraďte Joint Stereo za duální kanál ve výchozí konfiguraci

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

Kód:

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

Nahraďte A2DP_SBC_IE_CH_MD_JOINT za A2DP_SBC_IE_CH_MD_DUAL.

Zvyšte prioritu duálního kanálu

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

Kód:

 statický 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_B____________________________________________________ _ 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; } 

Pohybujte se, pokud s A2DP_SBC_IE_CH_MD_DUAL nahoru.

Zvyšte limit datového toku

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

Kód:

 #define A2DP_SBC_DEFAULT_BITRATE 328 

Nahraďte jej 512.

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

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

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

Kód:

 #define MAX_2MBPS_AVDTP_MTU 663 

Patchované Bluetooth stacky (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)).
  • Xiaomi MI5s (MIUI Global 9.6.1.0, Android 7) .zip
  • Xiaomi Redmi 3s (Android 6.01, mmb29m, globální miui 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 (Remurrection 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

Zajímavé Články