AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

Ushbu maqolani o'qishdan oldin, oldingi maqolani o'qib chiqish tavsiya etiladi: Bluetooth orqali audio: profillar, kodeklar va qurilmalar haqida maksimal ma'lumot

Ba'zi simsiz minigarnitura foydalanuvchilari barcha audio qurilmalar tomonidan qo'llab-quvvatlanadigan standart SBC Bluetooth kodekidan foydalanganda yomon ovoz sifati va yuqori chastotalar yo'qligi haqida xabar berishadi. Ovozni yaxshilash bo'yicha umumiy tavsiya aptX va LDAC kodeklarini qo'llab-quvvatlaydigan qurilmalar va minigarnituralarni sotib olishdir. Ushbu kodeklar litsenziyalash to'lovlarini talab qiladi, shuning uchun ularni qo'llab-quvvatlaydigan qurilmalar qimmatroq.

Ma'lum bo'lishicha, SBC ning past sifati Bluetooth steklari va naushnik sozlamalarining sun'iy cheklovlari bilan bog'liq va bu cheklovni smartfon yoki kompyuterga dasturiy ta'minotni o'zgartirish orqali har qanday mavjud qurilmalarda chetlab o'tish mumkin.

SBC kodek

SBC kodekida ulanishni o'rnatish bosqichida muhokama qilinadigan juda ko'p turli xil parametrlar mavjud. Ular orasida:

  • Kanallar soni va turi: Joint Stereo, Stereo, Dual Channel, Mono;
  • Chastota diapazonlari soni: 4 yoki 8;
  • Paketdagi bloklar soni: 4, 8, 12, 16;
  • Kvantlash vaqtida bitlarni taqsimlash algoritmi: Balandlik, SNR;
  • Kvantlash (bitpool) paytida ishlatiladigan bitlar pulining maksimal va minimal qiymati: odatda 2 dan 53 gacha.

Dekodlash qurilmasi ushbu parametrlarning har qanday kombinatsiyasini qo'llab-quvvatlashi kerak. Kodlovchi hamma narsani bajara olmasligi mumkin.
Mavjud Bluetooth steklari odatda quyidagi profilga mos keladi: Joint Stereo, 8 diapazon, 16 blok, Balandlik, bitpool 2..53. Ushbu profil 44.1 kbps bit tezligida 328 kHz audioni kodlaydi.
Bitpool parametri to'g'ridan-to'g'ri bitta profil ichidagi bit tezligiga ta'sir qiladi: u qanchalik baland bo'lsa, bit tezligi shunchalik yuqori bo'ladi va shuning uchun sifat.
Biroq, bitpool parametri ma'lum bir profilga bog'lanmagan; Bit tezligiga boshqa parametrlar ham ta'sir qiladi: kanallar turi, chastota diapazonlari soni, bloklar soni. Bitpoolni o'zgartirmasdan, nostandart profillarni kelishib, bilvosita bit tezligini oshirishingiz mumkin.

AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

SBC bit tezligini hisoblash formulasi

Masalan, Dual Channel rejimi har bir kanal uchun butun bitpooldan foydalangan holda kanallarni alohida kodlaydi. Qurilmani Joint Stereo o'rniga Dual Channel ishlatishga majburlash orqali biz bir xil maksimal bitpool qiymati bilan bit tezligini deyarli ikki baravar oshiramiz: 617 kbps.
Menimcha, muzokaralar bosqichida profilga bog'lanmagan bitpool qiymatidan foydalanish A2DP standartidagi nuqson bo'lib, bu SBC sifatining sun'iy cheklanishiga olib keldi. Bitpool emas, balki bit tezligi haqida muzokara qilish mantiqiyroq bo'ladi.

Ushbu belgilangan Bitpool va Bitrate qiymatlari yuqori sifatli audio uchun foydalanish uchun tavsiya etilgan qiymatlarga ega jadvaldan kelib chiqadi. Lekin tavsiya bu qadriyatlar bilan cheklanish uchun sabab emas.

AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

2 yildan 1.2 yilgacha faol bo'lgan A2007DP v2015 spetsifikatsiyasi barcha dekodlash qurilmalarining 512 kbps gacha bit tezligi bilan to'g'ri ishlashini talab qiladi:

SNK dekoderi maksimal bit tezligidan oshib ketmaydigan barcha mumkin bo'lgan bitpool qiymatlarini qo'llab-quvvatlashi kerak. Bu profil mavjud maksimal bit tezligini mono uchun 320 kb/s gacha, ikki kanalli rejimlar uchun esa 512 kb/s gacha cheklaydi.

Spetsifikatsiyaning yangi versiyasida bit tezligida cheklov yo'q. Taxminlarga ko'ra, 2015 yildan keyin chiqarilgan zamonaviy minigarnituralar EDR-ni qo'llab-quvvatlaydigan ≈730 kbps gacha bo'lgan bit tezligini qo'llab-quvvatlaydi.

Ba'zi sabablarga ko'ra men sinovdan o'tkazgan Linux (PulseAudio), Android, Blackberry va macOS Bluetooth steklarida bitpool parametrining maksimal qiymatida sun'iy cheklovlar mavjud bo'lib, bu maksimal bit tezligiga bevosita ta'sir qiladi. Ammo bu eng katta muammo emas; deyarli barcha minigarnituralar ham maksimal bitpul qiymatini 53 ga cheklaydi.
Men allaqachon ko'rganimdek, ko'pchilik qurilmalar uzilishlarsiz va tirqishlarsiz 551 kbps bit tezligi bilan o'zgartirilgan Bluetooth stekida mukammal ishlaydi. Ammo bunday bit tezligi oddiy sharoitlarda, oddiy Bluetooth steklarida hech qachon mos kelmaydi.

Bluetooth to'plamini o'zgartirish

A2DP standartiga mos keladigan har qanday Bluetooth stek ikki kanal rejimini qo'llab-quvvatlaydi, lekin uni interfeysdan faollashtirish mumkin emas.

Keling, interfeysga o'tish tugmachasini qo'shamiz! Men Android 8.1 va Android 9 uchun yamoqlarni yaratdim, ular stekga to‘liq Ikkita kanalni qo‘llab-quvvatlaydi, ishlab chiquvchi vositalardagi rejimni o‘zgartirish menyusiga rejim qo‘shadi va Ikki kanalli SBC-larni xuddi aptX kabi qo‘shimcha kodek sifatida ko‘radi. , AAC yoki LDAC (Android buni HD Audio deb ataydi) Bluetooth qurilmasi sozlamalariga tasdiq belgisini qo'shish orqali. Bu shunday ko'rinadi:

AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

Android 9 uchun yamoq
Android 8.1 uchun yamoq

Belgilash katakchasi yoqilganda, Bluetooth audio bit tezligida uzatila boshlaydi 551 kbps, agar minigarnituralar 3 Mbit/s ulanish tezligini qo'llab-quvvatlasa yoki 452 kbps, agar minigarnituralar faqat 2 Mbit/s ni qo'llab-quvvatlasa.

Ushbu yamoq quyidagi muqobil mikrodasturlarga kiritilgan:

  • LineageOS
  • Tirilish remiksi
  • crDroid

551 va 452 kbit/s qayerdan kelgan?

Bluetooth havo almashish texnologiyasi katta qattiq o'lchamli paketlarni samarali uzatish uchun mo'ljallangan. Ma'lumotlarni uzatish slotlarda sodir bo'ladi, bir uzatishda yuborilgan uyalar sonining eng ko'pi 5 ta. Shuningdek, 1 yoki 3 slotdan foydalanadigan uzatish rejimlari ham mavjud, lekin 2 yoki 4 emas. 5 slotda ulanish tezligida 679 baytgacha uzatishingiz mumkin. 2 Mbit/s va 1021 Mbit/s tezlikda 3 baytgacha va mos ravishda 3 - 367 va 552 bayt.

AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

Agar biz 679 yoki 1021 baytdan kamroq ma'lumotlarni uzatmoqchi bo'lsak, lekin 367 yoki 552 baytdan ortiq bo'lsa, uzatish hali ham 5 slotni oladi va ma'lumotlar bir vaqtning o'zida uzatiladi, bu esa uzatish samaradorligini pasaytiradi.

AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

SBC Dual Channel rejimida, Bitpool 44100 parametrli 38 Gts audio, har bir kvadrat uchun 16 blok, 8 chastota diapazoni, audioni 164 kbps bit tezligi bilan 452 baytli kadrlarga kodlaydi.
Ovoz L2CAP va AVDTP uzatish protokollarida inkapsullangan bo'lishi kerak, ular audio yukidan 16 bayt oladi.

AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

Shunday qilib, 5 ta uyali bitta Bluetooth uzatmasi 4 ta audio ramkani sig'dira oladi:

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

Biz yuborilayotgan paketga 11.7 ms audio ma'lumotni joylashtiramiz, ular 3.75 msda uzatiladi va paketda bizda foydalanilmagan 6 bayt qoldi.
Bitpoolni biroz ko'tarsangiz, endi bitta paketga 4 ta audio kadrni to'plash mumkin bo'lmaydi. Siz bir vaqtning o'zida 3 ta kadrni yuborishingiz kerak bo'ladi, bu uzatish samaradorligini pasaytiradi, har bir jo'natish uchun uzatiladigan audio miqdorini kamaytiradi va yomon radio sharoitida ovozning qoqilib ketishiga tezroq olib keladi.

Xuddi shu tarzda, EDR 551 Mbit/s uchun 3 kbit/s bit tezligi tanlangan: Bitpool 47 bilan, har bir kvadrat uchun 16 blok, 8 chastota diapazoni, freym hajmi 200 bayt, bit tezligi 551 kbit/s. Bitta paketda 5 kadr yoki 14.6 ms musiqa mavjud.

Barcha SBC parametrlarini hisoblash algoritmi juda murakkab, agar siz qo'lda hisoblasangiz, osongina chalkashib ketishingiz mumkin, shuning uchun men qiziquvchilarga yordam berish uchun interaktiv kalkulyator yaratdim: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Bularning barchasi nima uchun kerak?

AptX kodekining ovoz sifati haqidagi mashhur e'tiqoddan farqli o'laroq, ba'zi fayllarda u standart bit tezligi 328 kbps bo'lgan SBC-dan yomonroq natijalar berishi mumkin.

SBC dinamik ravishda kvantlash bitlarini chastota diapazonlariga pastdan yuqoriga qarab taqsimlaydi. Agar barcha bit tezligi past va o'rta chastotalar uchun ishlatilgan bo'lsa, yuqori chastotalar "kesiladi" (o'rniga sukunat bo'ladi).
aptX har doim bir xil sonli bitli chastota diapazonlarini kvantlaydi, shuning uchun u doimiy bit tezligiga ega: 352 kHz uchun 44.1 kbps, 384 ​​kHz uchun 48 kbit / s va u ularga eng kerak bo'lgan chastotalarga "bit-siljishi" mumkin emas. . SBC dan farqli o'laroq, aptX chastotalarni "kesmaydi", balki ularga kvantlash shovqinini qo'shib, audioning dinamik diapazonini kamaytiradi va ba'zan xarakterli tirqishni keltirib chiqaradi. SBC "tafsilotlarni yeydi" - eng tinch joylarni yo'q qiladi.
O'rtacha, SBC 328k bilan solishtirganda, aptX keng chastota diapazoni bilan musiqada kamroq buzilishlarni keltirib chiqaradi, lekin tor chastota diapazoni va keng dinamik diapazonli musiqada SBC 328k ba'zan g'alaba qozonadi.

Keling, alohida holatni ko'rib chiqaylik. Pianino chalayotgan yozuvning spektrogrammasi:
AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

Asosiy energiya 0 dan 4 kHz gacha bo'lgan chastotalarda yotadi va 10 kHz gacha davom etadi.
aptX da siqilgan faylning spektrogrammasi quyidagicha ko'rinadi:
AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

Va SBC 328k shunday ko'rinadi.
AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

Ko'rinib turibdiki, SBC 328k vaqti-vaqti bilan 16 kHz dan yuqori diapazonni butunlay o'chirib qo'ygan va barcha mavjud bit tezligini ushbu qiymatdan pastroq diapazonlarga sarflagan. Biroq, aptX inson qulog'iga eshitiladigan chastota spektriga ko'proq buzilishlarni kiritdi, buni aptX spektrogrammasidan chiqarilgan asl spektrogrammada ko'rish mumkin (qanchalik yorqinroq bo'lsa, buzilish ko'proq):
AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

SBC 328k signalni 0 dan 10 kHz gacha bo'lgan diapazonda kamroq buzdi va qolganlarini uzdi:
AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

SBC ning 485k bit tezligi diapazonlarni o'chirmasdan butun chastota diapazonini saqlab qolish uchun etarli edi.
AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

SBC 485k ushbu trekda 0-15 kHz diapazonda aptX dan sezilarli darajada oldinda va kichikroq, ammo baribir sezilarli farq bilan - 15-22 kHzda (qanchalik quyuqroq bo'lsa, buzilish kamroq):
AAC, aptX va LDAC kodeklari bo'lmagan naushniklarda ovozni yaxshilash uchun Bluetooth stekini o'zgartiramiz

Asl audio, SBC va aptX arxivi.

Yuqori bit tezligi SBC ga o'tish orqali siz har qanday minigarniturada aptX ni tez-tez uradigan ovozga ega bo'lasiz. 3 Mbps EDR ulanishini qo'llab-quvvatlaydigan minigarnituralarda 551 kbps bit tezligi aptX HD bilan taqqoslanadigan ovoz chiqaradi.

Bundan ham ko'proq qila olasizmi?

Android patchi, shuningdek, 2 Mbps EDR qurilmalari uchun bit tezligini yanada oshirish variantini ham o'z ichiga oladi. Siz qiyin radio sharoitida uzatish barqarorligini pasaytirish hisobiga bit tezligini 452 kbit/s dan 595 kbit/s gacha oshirishingiz mumkin.
Persist.bluetooth.sbc_hd_higher_bitrate o‘zgaruvchisini 1 ga o‘rnatish kifoya:

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

Haddan tashqari bit tezligi patchi hozirgacha faqat LineageOS 15.1 da qabul qilingan, ammo 16.0 da emas.

Qurilmaning mosligi

SBC Dual Channel deyarli barcha minigarnituralar, dinamiklar va avtomobil bosh birliklari tomonidan qo'llab-quvvatlanadi. Buning ajablanarli joyi yo'q - standart har qanday dekodlash qurilmalarida uni qo'llab-quvvatlashni talab qiladi. Ushbu rejim muammolarga olib keladigan oz sonli qurilmalar mavjud, ammo bu alohida holatlardir.
Mos qurilmalar haqida batafsil ma'lumotni quyidagi manzilda topishingiz mumkin 4pda yoki xda-ishlab chiquvchilar.

Ovoz farqlarini solishtirish

Men brauzerda real vaqtda SBC (shuningdek aptX va aptX HD) ga audioni kodlaydigan veb-xizmat yaratdim. Uning yordamida siz har qanday simli minigarnituralar, karnaylar va sevimli musiqangizda Bluetooth orqali ovozni uzatmasdan, turli SBC profillari va boshqa kodeklarning ovozini solishtirishingiz mumkin, shuningdek, audio ijro etilayotganda to'g'ridan-to'g'ri kodlash parametrlarini o'zgartirishingiz mumkin.
btcodecs.valdikss.org.ru/sbc-encoder

Android dasturchilari bilan bog'laning

Men Google-ning ko'plab Bluetooth stek ishlab chiqaruvchilariga Android-ning asosiy filiali - AOSP-ga yamoqlarni qo'shishni ko'rib chiqishlarini so'rab xat yozdim, ammo bitta javob olmadi. Mening yamoqlarim Android uchun Gerrit patch tizimi shuningdek, hech kimdan izohsiz qoldi.
Agar men Google-da ishlab chiquvchilar bilan bog'lanish va SBC HD-ni Android-ga olib kirishda yordam olsam, xursand bo'lardim. Gerritdagi yamoq allaqachon eskirgan (bu dastlabki tahrirlardan biri) va agar ishlab chiquvchilar mening o'zgarishlarim bilan qiziqsa, men uni yangilayman (uni yangilash men uchun oson emas, menda Android Q bilan mos qurilmalar yo'q) ).

xulosa

LineageOS, Resurrection Remix va crDroid proshivkali smartfon foydalanuvchilari hozirda yaxshilangan ovoz sifatidan bahramand bo'lishlari mumkin, Bluetooth qurilmasi sozlamalarida opsiyani faollashtirish kifoya. Linux foydalanuvchilari, shuningdek, o'rnatish orqali SBC bit tezligini oshirishlari mumkin Pali Rohardan yamoq, bu boshqa narsalar qatorida aptX, aptX HD va FastStream kodeklarini qo'llab-quvvatlaydi.

Manba: www.habr.com

a Izoh qo'shish