AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

Осы мақаланы оқымас бұрын алдыңғы мақаланы оқып шығу ұсынылады: Bluetooth арқылы дыбыс: ​​профильдер, кодектер және құрылғылар туралы максималды мәліметтер

Кейбір сымсыз құлақаспап пайдаланушылары барлық аудио құрылғылары қолдайтын стандартты SBC Bluetooth кодегін пайдаланған кезде нашар дыбыс сапасы мен жоғары жиіліктердің жоқтығы туралы хабарлайды. Дыбысты жақсарту бойынша жалпы ұсыныс aptX және LDAC кодектерін қолдайтын құрылғылар мен құлаққаптарды сатып алу болып табылады. Бұл кодектер лицензиялық алымдарды талап етеді, сондықтан оларды қолдайтын құрылғылар қымбатырақ.

SBC сапасының төмендігі Bluetooth стектері мен құлаққап параметрлерінің жасанды шектеулеріне байланысты екені белгілі болды және бұл шектеу смартфонға немесе компьютерге бағдарламалық жасақтаманы өзгерту арқылы кез келген қолданыстағы құрылғыларда айналып өтуге болады.

SBC кодегі

SBC кодектерінде қосылымды орнату кезеңінде келісілетін көптеген әртүрлі параметрлер бар. Олардың ішінде:

  • Арналардың саны мен түрі: Joint Stereo, Stereo, Dual Channel, Mono;
  • Жиілік жолақтарының саны: 4 немесе 8;
  • Пакеттегі блоктар саны: 4, 8, 12, 16;
  • Кванттау кезінде биттерді тарату алгоритмі: Дауыстылық, SNR;
  • Кванттау кезінде (битпул) пайдаланылатын биттердің пулының максималды және ең төменгі мәні: әдетте 2-ден 53-ке дейін.

Декодтау құрылғысы осы параметрлердің кез келген комбинациясын қолдауы керек. Кодер барлығын орындамауы мүмкін.
Қолданыстағы Bluetooth стектері әдетте келесі профильде келіседі: Біріккен стерео, 8 жолақ, 16 блок, Дыбыс деңгейі, битпул 2..53. Бұл профиль 44.1 кбит/с бит жылдамдығымен 328 кГц дыбысты кодтайды.
Bitpool параметрі бір профильдегі бит жылдамдығына тікелей әсер етеді: ол неғұрлым жоғары болса, бит жылдамдығы соғұрлым жоғары болады, демек сапа.
Дегенмен, битпул параметрі белгілі бір профильге байланысты емес; Бит жылдамдығына басқа параметрлер де әсер етеді: арналар түрі, жиілік диапазондарының саны, блоктар саны. Битпулды өзгертпей, стандартты емес профильдерді келісу арқылы бит жылдамдығын жанама түрде арттыруға болады.

AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

SBC бит жылдамдығын есептеу формуласы

Мысалы, Қосарна режимі әр арна үшін бүкіл бит пулын пайдалана отырып, арналарды бөлек кодтайды. Құрылғыны Joint Stereo орнына Қосарнаны пайдалануға мәжбүрлей отырып, біз бірдей максималды битпул мәні бар бит жылдамдығын екі есе дерлік аламыз: 617 кбит.
Менің ойымша, келіссөздер сатысында профильге байланбаған битпул мәнін пайдалану SBC сапасын жасанды шектеуге әкелген A2DP стандартындағы кемшілік болып табылады. Битпулдан гөрі бит жылдамдығын келіссөздер жүргізу мағынасы бар болар еді.

Бұл бекітілген Bitpool және Bitrate мәндері жоғары сапалы дыбыс үшін пайдалану үшін ұсынылған мәндері бар кестеден туындайды. Бірақ ұсыныс осы құндылықтармен шектелуге себеп емес.

AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

2 жылдан 1.2 жылға дейін белсенді болған A2007DP v2015 спецификациясы 512 кбит/с дейінгі бит жылдамдығымен дұрыс жұмыс істеу үшін барлық декодтау құрылғыларын талап етеді:

SNK декодері максималды бит жылдамдығынан асып кетпейтін барлық ықтимал битпул мәндерін қолдауы керек. Бұл профиль қол жетімді максималды бит жылдамдығын моно үшін 320 кб/с, ал екі арналы режимдер үшін 512 кб/с дейін шектейді.

Спецификацияның жаңа нұсқасында бит жылдамдығында шектеу жоқ. 2015 жылдан кейін шығарылған EDR қолдайтын заманауи құлаққаптар ≈730 кбит/с дейінгі бит жылдамдығын қолдай алады деп есептеледі.

Қандай да бір себептермен мен сынақтан өткізген Linux (PulseAudio), Android, Blackberry және macOS Bluetooth стектерінде битпул параметрінің максималды мәніне жасанды шектеулер қойылған, бұл максималды бит жылдамдығына тікелей әсер етеді. Бірақ бұл ең үлкен мәселе емес; барлық дерлік құлаққаптар максималды битпул мәнін 53-ке дейін шектейді.
Көріп отырғанымдай, құрылғылардың көпшілігі бит жылдамдығы 551 кбит/с болатын өзгертілген Bluetooth стекінде үзіліссіз немесе жарқылсыз тамаша жұмыс істейді. Бірақ мұндай бит жылдамдығы қалыпты жағдайларда, кәдімгі Bluetooth стектерінде ешқашан сәйкес болмайды.

Bluetooth стекін өзгерту

A2DP стандартымен үйлесімді кез келген Bluetooth стекінде Қосарна режимі қолдауы бар, бірақ оны интерфейстен белсендіру мүмкін емес.

Интерфейске қосқыш қосайық! Мен Android 8.1 және Android 9 үшін патчтар жасадым, олар стекке толық қос арна қолдауын қосады, әзірлеу құралдарындағы режимді ауыстырып-қосқыш мәзірге режимді қосады және қос арна қосылған SBCs оларды aptX сияқты қосымша кодек сияқты өңдейді. , AAC немесе LDAC (Android бұл HD Audio деп атайды) Bluetooth құрылғысының параметрлеріне құсбелгі қосу арқылы. Мынадай көрінеді:

AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

Android 9 үшін патч
Android 8.1 үшін патч

Құсбелгі қосулы кезде, Bluetooth дыбысы бит жылдамдығымен беріле бастайды 551 кбит/с, құлаққаптар 3 Мбит/с қосылу жылдамдығын қолдаса немесе 452 кбит/с, құлаққаптар тек 2 Мбит/с қолдаса.

Бұл патч келесі балама микробағдарламаларға кіреді:

  • LineageOS
  • Ремикс
  • crDroid

551 және 452 кбит/с қайдан пайда болды?

Bluetooth әуе бөлісу технологиясы белгіленген өлшемдегі үлкен пакеттерді тиімді жіберуге арналған. Деректерді тасымалдау слоттарда жүреді, бір тасымалдауда жіберілетін слоттардың ең көп саны 5. Сондай-ақ 1 немесе 3 слотты пайдаланатын, бірақ 2 немесе 4 емес тасымалдау режимдері бар. 5 слотта қосылым жылдамдығымен 679 байтқа дейін тасымалдауға болады. 2 Мбит/с және 1021 Мбит/с жылдамдықта 3 байтқа дейін және сәйкесінше 3 - 367 және 552 байт.

AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

679 немесе 1021 байттан аз, бірақ 367 немесе 552 байттан көп деректерді тасымалдағымыз келсе, тасымалдау әлі де 5 слотты алады және деректер бір уақытта тасымалданады, бұл тасымалдау тиімділігін төмендетеді.

AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

SBC қос арна режимінде, Bitpool 44100 параметрі бар 38 Гц дыбыс, кадрға 16 блок, 8 жиілік диапазоны, дыбысты 164 кбит/с бит жылдамдығымен 452 байт кадрларға кодтайды.
Дыбыс L2CAP және AVDTP тасымалдау протоколдарында инкапсуляциялануы керек, олар аудио пайдалы жүктемеден 16 байт алады.

AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

Осылайша, 5 слоттары бар бір Bluetooth трансмиссиясы 4 аудио кадрды орналастыра алады:

679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (заголовок SBC) - (164*4) = 6

Жіберілетін пакетке 11.7 мс аудио деректерін орналастырамыз, ол 3.75 мс-те жіберіледі және пакетте бізде 6 пайдаланылмаған байт қалды.
Егер сіз битпулды сәл көтерсеңіз, енді бір пакетке 4 аудио кадрды жинау мүмкін болмайды. Бір уақытта 3 кадр жіберуге тура келеді, бұл жіберу тиімділігін төмендетеді, бір кадрға берілетін дыбыс көлемін азайтады және нашар радио жағдайларында дыбыстың кекіруіне тезірек әкеледі.

Дәл осылай EDR 551 Мбит/с үшін 3 кбит/с бит жылдамдығы таңдалды: Bitpool 47 көмегімен, кадрға 16 блок, 8 жиілік диапазоны, кадр өлшемі 200 байт, бит жылдамдығы 551 кбит/с. Бір пакетте 5 кадр немесе 14.6 мс музыка бар.

Барлық SBC параметрлерін есептеу алгоритмі өте күрделі, егер сіз қолмен санасаңыз, оңай шатасуыңыз мүмкін, сондықтан мен қызығушылық танытқандарға көмектесу үшін интерактивті калькулятор жасадым: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Мұның бәрі не үшін қажет?

AptX кодекінің дыбыс сапасы туралы кең таралған пікірге қарамастан, кейбір файлдарда ол стандартты бит жылдамдығы 328 кбит/с болатын SBC-ден нашар нәтижелер бере алады.

SBC кванттау биттерін жиілік жолақтарына төменнен жоғарыға дейін динамикалық түрде бөледі. Егер барлық бит жылдамдығы төмен және орташа жиіліктер үшін пайдаланылса, жоғары жиіліктер «кесіп» қалады (орнына тыныштық орнайды).
aptX әрқашан бірдей бит саны бар жиілік диапазондарын кванттайды, сондықтан оның тұрақты бит жылдамдығы бар: 352 кГц үшін 44.1 кбит/с, 384 кГц үшін 48 кбит/с және оларды ең қажет ететін жиіліктерге «биттік ауысу» мүмкін емес. . SBC-тен айырмашылығы, aptX жиіліктерді «кеспейді», бірақ оларға кванттау шуын қосады, дыбыстың динамикалық диапазонын азайтады және кейде тән сықырлауды енгізеді. SBC «детальдарды жейді» - ең тыныш аймақтарды тастайды.
Орташа алғанда, SBC 328k-пен салыстырғанда, aptX кең жиілік диапазоны бар музыкада аз бұрмалануды енгізеді, бірақ тар жиілік диапазоны және кең динамикалық диапазоны бар музыкада SBC 328k кейде жеңеді.

Ерекше жағдайды қарастырайық. Пианинода ойнау жазбасының спектрограммасы:
AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

Негізгі энергия 0-ден 4 кГц-ке дейінгі жиіліктерде жатыр және 10 кГц-ке дейін жалғасады.
aptX-те қысылған файлдың спектрограммасы келесідей көрінеді:
AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

Бұл SBC 328k сияқты көрінеді.
AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

SBC 328k мезгіл-мезгіл 16 кГц-тен жоғары диапазонды толығымен өшіріп, осы мәннен төмен диапазондарда барлық қолжетімді бит жылдамдығын жұмсағанын көруге болады. Дегенмен, aptX адам құлағына естілетін жиілік спектріне көбірек бұрмалану енгізді, мұны aptX спектрограммасынан алынған бастапқы спектрограммадан көруге болады (неғұрлым жарқын болса, соғұрлым бұрмалану):
AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

SBC 328k сигналды 0-ден 10 кГц диапазонында аз бұзып, қалғанын кесіп тастады:
AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

SBC-нің 485к бит жылдамдығы диапазондарды өшірмей, бүкіл жиілік диапазонын сақтау үшін жеткілікті болды.
AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

SBC 485k осы жолдағы 0-15 кГц диапазонында aptX-тен айтарлықтай озып кетті, кішірек, бірақ әлі де байқалатын 15-22 кГц айырмашылығы бар (қараңғырақ болса, бұрмалану азырақ):
AAC, aptX және LDAC кодектері жоқ құлаққаптардағы дыбысты жақсарту үшін Bluetooth стекін өзгертеміз

Түпнұсқа аудио, SBC және aptX мұрағаты.

Жоғары биттік SBC-ге ауысу арқылы сіз кез келген құлаққапта aptX-тен жиі шығатын дыбыс аласыз. 3 Мбит/с EDR қосылымын қолдайтын құлақаспаптарда 551 кбит/с бит жылдамдығы aptX HD-мен салыстырылатын дыбыс шығарады.

Сіз одан да көп жасай аласыз ба?

Android патчінде 2 Мбит/с EDR құрылғылары үшін бит жылдамдығын одан әрі арттыру опциясы да бар. Күрделі радио жағдайларында тасымалдау тұрақтылығын төмендету есебінен бит жылдамдығын 452 кбит/с-тан 595 кбит/с дейін арттыруға болады.
persist.bluetooth.sbc_hd_higher_bitrate айнымалы мәнін 1-ге орнату жеткілікті:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Төтенше биттік патч осы уақытқа дейін тек LineageOS 15.1-де ғана қабылданған, бірақ 16.0-де емес.

Құрылғының үйлесімділігі

SBC Dual Channel барлық дерлік құлаққаптармен, динамиктермен және автомобиль бас блоктарымен қолдау көрсетеді. Бұл таңқаларлық емес - стандарт кез келген декодтау құрылғыларында оның қолдауын талап етеді. Бұл режим ақаулық тудыратын құрылғылардың аз саны бар, бірақ бұл оқшауланған үлгілер.
Үйлесімді құрылғылар туралы қосымша мәліметтерді мына жерден табуға болады 4pda немесе xda-developers.

Дыбыс айырмашылығын салыстыру

Мен нақты уақытта, дәл браузерде дыбысты SBC (сонымен қатар aptX және aptX HD) кодтайтын веб-қызмет жасадым. Оның көмегімен сіз кез келген сымды құлақаспаптарда, динамиктерде және сүйікті музыкада Bluetooth арқылы дыбысты жібермей-ақ әртүрлі SBC профильдерінің және басқа кодектердің дыбысын салыстыра аласыз, сонымен қатар дыбысты ойнату кезінде кодтау параметрлерін тікелей өзгерте аласыз.
btcodecs.valdikss.org.ru/sbc-encoder

Android әзірлеушілеріне хабарласыңыз

Мен Google-дағы көптеген Bluetooth стек әзірлеушілеріне Android негізгі филиалы - AOSP патчтарын қосуды қарастыруды сұрадым, бірақ бірде-бір жауап алмадым. Менің патчтарым Android жүйесіне арналған Gerrit патч жүйесі сондай-ақ қатысы бар ешкімнен түсініктемесіз қалды.
Мен Google-дағы әзірлеушілермен байланысуға және SBC HD-ті Android жүйесіне жеткізуге көмектесетін болсам, қуанышты болар едім. Герриттегі патч әлдеқашан ескірген (бұл ертерек түзетулердің бірі) және әзірлеушілер менің өзгерістеріме қызығушылық танытса, мен оны жаңартамын (оны жаңарту мен үшін оңай емес, менде Android Q-мен үйлесімді құрылғылар жоқ. ).

қорытынды

LineageOS, Resurrection Remix және crDroid микробағдарламасы бар смартфондарды пайдаланушылар дәл қазір жақсартылған дыбыс сапасын пайдалана алады, тек Bluetooth құрылғысының параметрлерінде опцияны белсендіріңіз. Linux пайдаланушылары орнату арқылы жоғарылатылған SBC бит жылдамдығын ала алады Пали Рохардан алынған патч, ол басқа нәрселермен қатар aptX, aptX HD және FastStream кодектеріне қолдауды қосады.

Ақпарат көзі: www.habr.com

пікір қалдыру