Как да променяте Bluetooth стекове на Android за значително подобрено Bluetooth качество на звука



Опитайте Нашия Инструмент За Премахване На Проблемите

Предупреждение: Това е силно усъвършенствано ръководство, което включва промяна на вашите Bluetooth стекове на Android - прочетете изцяло това ръководство и следвайте всички инструкции точно както е дадено.



Въпреки факта, че Bluetooth слушалките и Bluetooth аудиото са станали доста популярни, това е малко проблем за аудиофилите, тъй като Bluetooth е доказано, че намалява качеството на звука, тъй като части от аудио информацията и честотите се губят във въздуха чрез Bluetooth поточно предаване.



Ето защо някои производители пускат aptX и LDAC кодеци, за да подобрят качеството на звука над стандартния SBC Bluetooth кодек, който се поддържа от всички слушалки и повечето Bluetooth устройства - но устройствата с aptX и LDAC кодеци са много по-скъпи, защото тези кодеци изискват лицензионни такси, които потребителят плаща в дългосрочен план.



Ниското качество на звука на Bluetooth кодека SBC е причинено от изкуствени ограничения на всички текущи Bluetooth стекове и конфигурация на слушалки и това ограничение може да бъде заобиколено на всички съществуващи устройства.

Ако се интересувате от Bluetooth аудио, ще ви покажем в края на това ръководство как да направите дъмп на Bluetooth аудио регистрация и да го проверите, за да видите какъв тип качество и честота на звука получавате от Bluetooth приемника на вашия Android.

По-голямата част от това ръководство ще се съсредоточи върху няколко прости ощипвания и начини за четене на вашия аудио изход за Bluetooth, за да подобри значително качеството на изхода на стандартните SBC Bluetooth кодеци - моля, прочетете внимателно цялото това ръководство, тъй като е доста образователно и има много различни неща да мига или да ощипвам, в зависимост от модела на вашето устройство.



В този край на това ръководство е списък с предварително закърпени Bluetooth стекове за много популярни устройства с Android - те могат да бъдат мигани при възстановяване, както бихте направили всички други подвижни .zip - ако никое от устройствата не ви принадлежи, ще имате да следвате ръководството за модифициране на Bluetooth стекове на Android.

Кратка техническа информация за кодека SBC

SBC има много различни параметри, които се договарят по време на фазата на настройка на връзката:

  • Тип и номер на аудио канала: Съвместен стерео, стерео, двоен канал, моно;
  • Брой честотни ленти: 4 или 8;
  • Брой аудио блокове в един пакет: 4, 8, 12, 16;
  • Алгоритъм за разпределение на битове за квантоване: Loudness, SNR;
  • Максимален и минимален битов пул, използван в процеса на квантуване: обикновено 2-53.

Декодерът е необходим, за да поддържа всяка комбинация от тези параметри. Кодерът може да внедри само част от тях.

Съществуващите Bluetooth стекове обикновено договарят следния профил: Съвместно стерео, 8 ленти, 16 блока, Loudness, битпул 2..53. Този профил кодира 44,1 kHz аудио с битрейт 328 kbps.

Параметърът Bitpool влияе пряко на битрейта в рамките на същия профил: колкото по-висок е той, толкова по-висок е битрейтът, а оттам и качеството.

Параметърът на битпула обаче не е обвързан с определен профил. Битрейтът се влияе значително и от други параметри: тип на аудио канала, брой честотни ленти, брой аудио блокове. Можете да увеличите битрейта индиректно чрез договаряне на нестандартни профили, без да променяте битовия пул.

Например, Dual Channel кодира канали поотделно, като използва целия битпул за всеки канал. Принуждаването на устройството да използва Dual Channel вместо Joint Stereo ще ни осигури почти удвоен битрейт при същия максимален битпул, 617 kbps.

Според мен битпулът трябва да е вътрешна променлива. Грешка в дизайна на спецификацията A2DP е, че стойността на битпула не е обвързана с други параметри на кодека и е дефинирана само като глобална стойност.

Тези фиксирани стойности на Bitpool и Bitrate произхождат от препоръчаните стойности за висококачествен звук. Но препоръката не е оправдание за ограничаване на профила до тези стойности.

Спецификацията A2DP v1.2, която е била активна от 2007 до 2015 г., изисква всички декодери да работят правилно с битрейт до 512 kbps:

Декодерът на SNK трябва да поддържа всички възможни битпул стойности, които не водят до превишаване на максималната битова скорост. Този профил ограничава наличната максимална скорост на предаване до 320kb / s за моно и 512kb / s за двуканални режими.

В новата версия на спецификацията няма ограничение на битрейта. Предполага се, че модерните слушалки, пуснати след 2015 г., могат да поддържат битрейт до 1000 kbps .

По някаква причина всички тествани в момента Bluetooth стекове (Linux (PulseAudio), Android, Blackberry и macOS) имат изкуствени ограничения на максималния битпул параметър, който пряко влияе върху максималната битрейт. Но това не е най-големият проблем, почти всички слушалки също ограничават максималната стойност на битпула до 53.

Повечето устройства работят добре на модифициран Bluetooth стек с битрейт 507 kbps, без прекъсвания и пукане. Но такъв битрейт никога няма да бъде договорен при нормални условия, с налични Bluetooth стекове.

*** Необходимо за тестване с помощта на ръководства по-долу: bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso.torrent

Как да тествате на компютър

Тестът за съвместимост на слушалките с висок битрейт SBC е най-лесният за изпълнение на компютър с Bluetooth адаптер. Подготвих изображение на Ubuntu с модифициран Bluetooth стек, който може да се изпълнява както във виртуална машина (чрез свързване на Bluetooth адаптер като USB устройство във виртуалната машина, той работи и с адаптерите, вградени в лаптопите) или чрез зареждане от USB флаш устройството. Това изображение използва следния профил: Dual Channel, 8 ленти, 16 блока, Loudness, bitpool 2..41, 44.1 kHz, който осигурява 485 kbps битрейт.

Работа във виртуална машина

  • Изтеглете Virtualbox и Virtualbox Extension Pack: https://www.virtualbox.org/wiki/Downloads;
  • Инсталирайте Virtualbox, стартирайте го;
  • Инсталирайте разширение с помощта на Файл → Предпочитания → Разширения;
  • Създайте нова виртуална машина: Linux, Ubuntu (64-битова), 1024 RAM. Не създавайте HDD.
  • Придвижете се до настройките на виртуалната машина, в Storage изберете Controller: IDE, Empty, натиснете иконата на CD → Изберете файл на виртуален оптичен диск;
  • Изберете изтеглено bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso;
  • Запазване и затваряне на прозореца с настройки, стартиране на виртуална машина;
  • Щракнете с десния бутон на мишката върху иконата на USB кабел в долния десен ъгъл, изберете вашия Bluetooth адаптер;

Работи на компютър

Изображението поддържа BIOS / CSM и UEFI зареждане.

  • Запишете изображението на USB флаш устройство с помощта на Etcher: https://etcher.io/. Тази операция ще изтрие всички съществуващи файлове на USB устройство.
  • Изключете компютъра;
  • Поставете USB флаш устройство, включете компютъра и натиснете бутона за ред за зареждане (обикновено Esc или F12);
  • Изберете вашето USB флаш устройство.

Извършване на теста

  • (по избор, но се препоръчва) Щракнете двукратно върху скрипта „Btsnoop Dump“ на работния плот. Той ще започне събирането на данни за Bluetooth за по-късен анализ. Не затваряйте прозореца на терминала.
  • Превключете слушалките в режим на сдвояване;
  • Щракнете върху стрелката в горния десен ъгъл, изберете икона на Bluetooth → Настройки на Bluetooth;
  • Изберете слушалките си, изчакайте, докато сдвояването завърши и затворете прозореца;
  • Задайте силата на звука на Ubuntu на около 2/3. Също така намалете силата на звука, като използвате бутоните на слушалките, тъй като може да бъде много силен след сдвояване.
  • Отворете папката „музика“, пуснете „testrecord1.flac“;
  • (по избор, но се препоръчва) Затворете плейъра, затворете прозореца на терминала. Това ще спре събирането на данни.
  • (по избор, но се препоръчва) Отворете браузъра Firefox, качете дъмп на данни (btsnoop_hci.btsnoop на работния плот) на https://btcodecs.valdikss.org.ru/

Можете да слушате друга музика в музикалната папка или да качите своя собствена;

В слушалките не трябва да има пращене, прекъсване на звука или друго изкривяване на звука. Ако чуете добър висококачествен звук, това означава, че слушалките ви поддържат звук с битова скорост от 485 kbps.

Как да тествате на устройство с Android

За да тествате от Android смартфон или таблет, трябва да използвате модифициран Bluetooth стек, който изисква root права.

Как да заснемете дъмп на данни за Bluetooth на Android

  1. Изключете Bluetooth;
  2. В настройките за програмисти активирайте превключвателя „Активиране на Bluetooth HCI snoop log“;
  3. Включете Bluetooth, свържете се със слушалките си чрез Bluetooth меню (това е важно! Не разрешавайте автоматична връзка!);
  4. Възпроизвеждане на кратка аудио проба;
  5. Отворете настройките на разработчика, деактивирайте превключвателя „Активиране на Bluetooth HCI snoop log“;
  6. Трябва да е създаден /storage/emulated/0/btsnoop_hci.log или /data/misc/bluetooth/logs/btsnoop_hci.log. Ако липсва, отворете /etc/bluetooth/bt_stack.conf с текстов редактор и вижте пътя в опцията BtSnoopFileName.

В слушалките не трябва да има пращене, прекъсване на звука или друго изкривяване на звука. Ако чуете добър висококачествен звук с изправената библиотека, това означава, че слушалките ви поддържат звук с битова скорост 512 kbps.

Моля, следвайте внимателно алгоритъма по-горе. Особено, ако изключите слушалките или прекъснете връзката след сдвояването, важно е да се свържете със слушалките ръчно от настройките на Bluetooth, не разрешавайте автоматично свързване!

Устройства, които поддържат поне 512 kbit / s SBC

  • ОЩЕ 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 макс. 39. Отговорете, че не поддържа Dual Channel, но работете, ако е принуден, 462 kbit / s. Не отговаря на спецификацията A2DP.)
  • Bluedio T5 (Отговорете, че не поддържате Dual Channel, но работете, ако сте принудени. Не отговаря на спецификацията A2DP.)
  • Bluedio T6 (Отговорете, че не поддържа Dual Channel, но работете, ако е принуден. Не отговаря на спецификацията A2DP. Приема Max 97220 чип.)
  • Маршал Майор II Bluetooth
  • Преувеличете RealForce D1
  • Едификатор W830BT
  • DEXP BT-250
  • Logitech BT адаптер
  • Автомобилна глава Noname (чип CSR8645)
  • Sony DSX-A400BT автомобилна глава

Устройства, които поддържат SBC по-висока от 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, двуканален, 4 подленти)

Устройства, които не работят с по-високи битрейтове или Dual Channel

  1. Harper HB-202 (бисквити; чип Beken BK3256)
  2. Sony Ericsson MW600 (високочестотно изкривяване, пращене; устройство от 2009 г.)

Защо това е важно: SBC 328k и 485k срещу aptX

Противно на общоприетото схващане за качеството на звука на aptX, в някои случаи то може да доведе до по-лошо качество на звука от SBC със стандартен 328k битрейт.

SBC разпределя динамично битовете за квантуване за честотните ленти, действайки на принципа 'отдолу нагоре'. Ако целият битрейт е бил използван за долната и средната честота, горните честоти се „отрязват“ (заглушават).

aptX квантува честотни ленти със същия брой битове постоянно, което го прави постоянен битрейт кодек: 352 kbps за 44,1 kHz, 384 kbps за 48 kHz. Той не може да „прехвърля битове“ на честоти, които са най-необходими в тях. За разлика от SBC, aptX няма да „намали“ честотите, но ще добави към тях шум от квантуване, намалявайки динамичния обхват на звука и понякога въвеждайки пращене. SBC, напротив, „изяжда подробностите“ - изхвърля най-тихите зони.

Средно, в сравнение със SBC 328k, aptX прави по-малко изкривяване в музиката с широк честотен диапазон, но при музика с тесен честотен диапазон и широк динамичен диапазон SBC 328k понякога печели.

Нека разгледаме специален случай, запис на пиано. Ето една спектрограма:


Най-много енергия се крие в честотите 0-4 kHz и продължава до 10 kHz.
Спектрограмата на файла aptX файл изглежда така:

Ето SBC 328k:

Вижда се, че SBC 328k периодично напълно отрязва обхвата над 16 kHz и използва всички налични битрейтове за диапазони под тази стойност. Въпреки това, aptX въведе повече изкривявания в честотния спектър, чути от човешкото ухо, което може да се види на извадената оригинална спектрограма от спектрограмата на aptX (колкото по-ярко, толкова повече изкривяване):


Докато SBC 328k е въвел по-малко изкривяване, сигналът е в диапазона от 0 до 10 kHz, а останалото е намалено:

Битрейт 485k за SBC беше достатъчен, за да запази целия честотен диапазон, без да отрязва лентите.

SBC 485k на тази аудио проба е много по-добра от aptX в диапазона от 0-15 kHz и с по-малка, но все пак забележима разлика - при 15-22 kHz (колкото по-тъмна, толкова по-малко изкривяване):

Преминавайки към SBC с висока битрейт, ще получите звук, превъзхождащ aptX през повечето време, на всякакви слушалки.

  • original_and_aptx.zip
  • sbc.zip

Как да модифицирам Bluetooth стековете на Android 5 - 7

Тези модификации трябва да бъдат приложени към наличните Android Bluetooth стекове Bluedroid (Android 5) и Fluoride (Android 6-7). Модифицираният от Qualcomm стек не се поддържа.

Заменете Joint Stereo с Dual Channel в стандартна SBC конфигурация

android / платформа / външен / bluetooth / bluedroid / btif / co / bta_av_co.c: 99

Код:

конст 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 с A2D_SBC_IE_CH_MD_DUAL.

Увеличете двуканалния приоритет

android / платформа / външен / bluetooth / bluedroid / btif / co / bta_av_co.c: 41

Код:

ако (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; иначе ако (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; иначе ако (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; иначе ако (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; Преместете ако с A2D_SBC_IE_CH_MD_DUAL в началото.
  1. Деактивирайте или увеличете ограничението на битрейта

Bluetooth стекът на Android има не само ограничение на битпула, но и ограничение на скоростта на предаване, 328 kbit / s. Ако слушалките поддържат, например, битпул 53 за 48 kHz, Android ще намали битпула надолу, за да се побере в граница от 328 kbit / s. Това ще се случи СЛЕД договаряне на кодека, на етапа на кодиране, не се взема предвид стойността на битпула в пакета Bluetooth SetCapabilities.

android / платформа / външен / bluetooth / bluedroid / btif / src / btif_media_task.c: 172

Код:

#define DEFAULT_SBC_BITRATE 328

Заменете с 512.

  1. (само за експерименти) Деактивирайте MTU limit.

Това се изисква за битрейтове, по-високи от ~ 580 kbit / s.

btif / src / btif_media_task.c: 174

Код:

/ * 2DH5 размер на полезния товар от 679 байта - (4 байта заглавка L2CAP + 12 байта заглавка AVDTP) * / #define MAX_2MBPS_AVDTP_MTU 663

Как да модифицирам Bluetooth стекове на Android 8 - 9

Тези модификации не са тествани, но трябва да работят.

Добавете двуканална поддръжка към A2DP SBC Source

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

Код:

/ * SBC SRC кодек възможности * / статично const tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_BLOCKS_8;

добавете A2DP_SBC_IE_CH_MD_DUAL в ch_mode.

Заменете Joint Stereo с Dual Channel в конфигурацията по подразбиране

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

Код:

/ * Подразбиране SBC кодек конфигурация * / конст 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 с A2DP_SBC_IE_CH_MD_DUAL.

Увеличете двуканалния приоритет

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

Код:

статичен бул 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_res_DDMD p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; връщане вярно; } ако (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; връщане вярно; } ако (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; връщане вярно; } ако (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; връщане вярно; } върнете false; }

Преместете ако с A2DP_SBC_IE_CH_MD_DUAL в началото.

Увеличете лимита на битрейт

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

Код:

#define A2DP_SBC_DEFAULT_BITRATE 328

Заменете с 512.

  1. (само за експерименти) Деактивирайте MTU limit

Това се изисква за битрейтове, по-високи от ~ 580 kbit / s.

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

Код:

#define MAX_2MBPS_AVDTP_MTU 663

Изправени Bluetooth стекове (мигащи се)

  • 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
  • цип
  • Le Max 2 Oreo Patched.zip
10 минути четене