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

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

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

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

Ниското качество на звука на кодека на SBC Bluetooth е причинено от изкуствени ограничения на всички текущи 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 стекове обикновено договарят следния профил: Joint Stereo, 8 ленти, 16 блока, Loudness, bitpool 2..53. Този профил кодира аудио 44.1 kHz с битрейт 328 kbps.

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

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

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

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

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

Спецификацията 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 битрейт.

Работи във VM

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

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

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

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

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

  • (незадължително, но препоръчително) Кликнете два пъти върху скрипта „Btsnoop Dump“ на работния плот. Той ще започне да улавя Bluetooth данни за по-късен анализ. Не затваряйте прозореца на терминала.
  • Превключете слушалките в режим на сдвояване;
  • Кликнете върху стрелката в горния десен ъгъл, изберете Bluetooth икона → Bluetooth Settings;
  • Изберете слушалки, изчакайте, докато свързването свърши и затворете прозореца;
  • Задайте силата на звука на Ubuntu около 2/3. Също така намалете силата на звука с помощта на бутони за слушалки, тъй като може да е много силно след сдвояване.
  • Отворете папката „музика“, пуснете „testrecord1.flac“;
  • (незадължително, но препоръчително) Затворете плейъра, затворете прозореца на терминала. Това ще спре заснемането на данни.
  • (незадължително, но препоръчително) Отворете браузъра Firefox, качете сметището за данни (btsnoop_hci.btsnoop на работния плот) на //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

  • 1 МНОГО 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. Отговорете, че не поддържат двоен канал, но работят, ако са принудени, 462 kbit / s. Не отговаря на спецификацията на A2DP.)
  • Bluedio T5 (Отговорете, че не поддържа двоен канал, но работете, ако е принуден. Не отговаря на спецификацията на A2DP.)
  • Bluedio T6 (Отговорете, че не поддържа двоен канал, но работете, ако е принуден. Не отговаря на спецификацията на A2DP. Приемете чип Max 97220.)
  • Маршал Майор II Bluetooth
  • Overdrive 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)
  • Маршал Майор II Bluetooth (617-660 kbit / s)
  • Overdrive RealForce D1 (730 kbit / s, двуканален, 4 поддиапазона)

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

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

Защо това е важно: SBC 328k и 485k vs 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-модифицираният стек не се поддържа.

Заменете съвместно стерео с двоен канал в стандартна SBC конфигурация

андроид / платформа / външен / Bluetooth / bluedroid / btif / сътрудничество / 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.

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

андроид / платформа / външен / Bluetooth / bluedroid / btif / сътрудничество / bta_av_co.c: 4

Код:

 ако (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. Деактивирайте или увеличете ограничението на битрейт

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

андроид / платформа / външен / Bluetooth / bluedroid / btif / SRC / btif_media_task.c: 172

Код:

 #define DEFAULT_SBC_BITRATE 328 

Заменете с 512.

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

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

btif / SRC / btif_media_task.c: 174

Код:

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

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

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

Добавете поддръжка на двоен канал в източник на A2DP SBC

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

Код:

 / * Възможности за кодек на SBC SRC * / статичен const tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_SAMP_FREQ_44, / * samp_freq * / (A2DP_SBC_IE_CH_MD_MONO; 

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

Заменете съвместно стерео с двоен канал в конфигурация по подразбиране

/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

Код:

 статичен 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_JOINT2> chp p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; връщане вярно; } 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; връщане вярно; } 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; връщане вярно; } 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; връщане вярно; } return 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

Това е необходимо за битрейт, по-висок от ~ 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)).
  • 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

Интересни Статии