AAC, aptX болон LDAC кодлогчгүй чихэвчний дууг сайжруулахын тулд бид Bluetooth стекийг өөрчилдөг.

Энэ нийтлэлийг уншихаасаа өмнө өмнөх нийтлэлийг уншихыг зөвлөж байна. Bluetooth-ээр дамжуулан аудио: профайл, кодлогч, төхөөрөмжийн талаархи хамгийн их мэдээлэл

Зарим утасгүй чихэвч хэрэглэгчид бүх аудио төхөөрөмж дэмждэг стандарт SBC Bluetooth кодлогчийг ашиглахдаа дууны чанар муу, өндөр давтамж байхгүй гэж мэдээлдэг. Дууг сайжруулах нийтлэг зөвлөмж бол aptX болон LDAC кодлогчийг дэмждэг төхөөрөмж, чихэвч худалдаж авах явдал юм. Эдгээр кодлогч нь лицензийн төлбөр шаарддаг тул тэдгээрийг дэмждэг төхөөрөмжүүд илүү үнэтэй байдаг.

SBC-ийн чанар муу байгаа нь Bluetooth стек болон чихэвчний тохиргооны зохиомол хязгаарлалттай холбоотой бөгөөд ухаалаг утас эсвэл компьютерт програм хангамжийн өөрчлөлт хийх замаар одоо байгаа бүх төхөөрөмж дээр энэ хязгаарлалтыг тойрч гарах боломжтой юм.

SBC кодлогч

SBC кодлогч нь холболтын тохиргооны үе шатанд тохиролцсон олон янзын параметртэй байдаг. Тэдний дунд:

  • Сувгуудын тоо, төрөл: Хамтарсан стерео, стерео, хос суваг, моно;
  • Давтамжийн зурвасын тоо: 4 эсвэл 8;
  • Багц дахь блокуудын тоо: 4, 8, 12, 16;
  • Квант тогтоох үед битүүдийг хуваарилах алгоритм: Дууны чанга, SNR;
  • Квант тогтоох явцад ашигласан битийн сангийн хамгийн их ба хамгийн бага утга (битпул): ихэвчлэн 2-оос 53 хүртэл байдаг.

Код тайлах төхөөрөмж нь эдгээр параметрүүдийн аль ч хослолыг дэмжих ёстой. Кодлогч бүх зүйлийг хэрэгжүүлэхгүй байж магадгүй юм.
Одоо байгаа Bluetooth стекүүд нь ихэвчлэн дараах профайл дээр тохирдог: Хамтарсан стерео, 8 хамтлаг, 16 блок, Дууны өндөр, битпул 2..53. Энэ профайл нь 44.1 kbps битийн хурдтай 328 кГц аудио кодчилдог.
Bitpool параметр нь нэг профайл доторх битийн хурдад шууд нөлөөлдөг: энэ нь өндөр байх тусам битийн хурд өндөр байх тусам чанар болно.
Гэсэн хэдий ч bitpool параметр нь тодорхой профайлтай холбогддоггүй; Мөн битийн хурдад бусад параметрүүд ихээхэн нөлөөлдөг: сувгийн төрөл, давтамжийн зурвасын тоо, блокуудын тоо. Та стандарт бус профайл дээр тохиролцож, битпулыг өөрчлөхгүйгээр битийн хурдыг шууд бусаар нэмэгдүүлэх боломжтой.

AAC, aptX болон LDAC кодлогчгүй чихэвчний дууг сайжруулахын тулд бид Bluetooth стекийг өөрчилдөг.

SBC битийн хурдыг тооцоолох томъёо

Жишээ нь, Хос суваг горим нь суваг тус бүрийн битпулыг бүхэлд нь ашиглан сувгуудыг тусад нь кодчилдог. Төхөөрөмжийг Joint Stereo-ийн оронд Хос суваг ашиглахыг албадснаар бид битийн хурдыг 617 kbps-ийн хамгийн их утгаар бараг хоёр дахин нэмэгдүүлнэ.
Миний бодлоор, хэлэлцээрийн шатанд профайлтай холбоогүй битпулын утгыг ашиглах нь A2DP стандартын алдаа бөгөөд энэ нь SBC чанарыг зохиомлоор хязгаарлахад хүргэсэн. Bitpool гэхээсээ илүү битийн хурдыг тохиролцох нь илүү утга учиртай байх болно.

Эдгээр тогтсон Bitpool болон Bitrate утгууд нь өндөр чанартай аудио ашиглахад санал болгож буй утгууд бүхий хүснэгтээс гаралтай. Гэхдээ зөвлөмж бол эдгээр үнэт зүйлсээр өөрийгөө хязгаарлах шалтгаан биш юм.

AAC, aptX болон LDAC кодлогчгүй чихэвчний дууг сайжруулахын тулд бид Bluetooth стекийг өөрчилдөг.

2-1.2 онд идэвхтэй байсан A2007DP v2015 үзүүлэлт нь 512 кбит/с хүртэлх битийн хурдтай зөв ажиллахын тулд бүх код тайлах төхөөрөмжийг шаарддаг.

SNK-ийн декодер нь битийн хурдны дээд хэмжээнээс хэтрээгүй бүх боломжит битийн утгыг дэмжих ёстой. Энэ профайл нь моно горимд 320 кб/с, хоёр сувгийн горимд 512 кб/с хүртэл битийн хурдыг хязгаарладаг.

Техникийн шинэ хувилбарт битийн хурдад хязгаарлалт байхгүй. 2015 оноос хойш гарсан орчин үеийн чихэвчүүд нь EDR-ийг дэмждэг ≈730 kbps хүртэлх битийн хурдыг дэмждэг гэж тооцоолж байна.

Зарим шалтгааны улмаас миний туршиж үзсэн Linux (PulseAudio), Android, Blackberry болон macOS Bluetooth стекүүд нь bitpool параметрийн хамгийн их утгын хиймэл хязгаарлалттай бөгөөд энэ нь хамгийн их битийн хурдад шууд нөлөөлдөг. Гэхдээ энэ нь хамгийн том асуудал биш бөгөөд бараг бүх чихэвчүүд хамгийн их битпулын утгыг 53 хүртэл хязгаарладаг.
Миний харж байгаагаар ихэнх төхөөрөмжүүд нь 551 кбит/с хурдтай, өөрчилсөн Bluetooth стек дээр тасалдал, хагаралгүйгээр төгс ажилладаг. Гэхдээ ийм битийн хурд нь ердийн нөхцөлд, ердийн Bluetooth стек дээр хэзээ ч тогтвортой байх болно.

Bluetooth стекийг өөрчилж байна

A2DP стандартад нийцсэн аливаа Bluetooth стек нь Хос сувгийн горимыг дэмждэг боловч интерфейсээс үүнийг идэвхжүүлэх боломжгүй юм.

Интерфэйс дээр унтраалга нэмье! Би Android 8.1 болон Android 9-д зориулсан засваруудыг хийсэн бөгөөд эдгээр нь стект бүрэн хос сувгийн дэмжлэгийг нэмж, програмын хэрэгслүүдийн горим солих цэсэнд горим нэмж, хос сувгийг идэвхжүүлсэн SBC-г aptX шиг нэмэлт кодлогч мэт харьцдаг. , AAC эсвэл LDAC (Android нь үүнийг HD Аудио гэж нэрлэдэг) Bluetooth төхөөрөмжийн тохиргоонд тэмдэглэгээ нэмж оруулаарай. Энэ нь иймэрхүү харагдаж байна:

AAC, aptX болон LDAC кодлогчгүй чихэвчний дууг сайжруулахын тулд бид Bluetooth стекийг өөрчилдөг.

Android 9-д зориулсан засвар
Android 8.1-д зориулсан засвар

Шалгалтын нүдийг идэвхжүүлсэн үед Bluetooth аудио нь битийн хурдаар дамжиж эхэлнэ 551 kbps, чихэвч нь 3 Mbit/s-ийн холболтын хурдыг дэмждэг бол, эсвэл 452 kbps, чихэвч нь зөвхөн 2 Mbit/s дэмждэг бол.

Энэ нөхөөс нь дараах өөр програм хангамжид багтсан болно:

  • LineageOS
  • Амилалтын ремикс
  • crDroid

551 ба 452 кбит/с хаанаас ирсэн бэ?

Bluetooth агаар хуваалцах технологи нь тогтмол хэмжээтэй том пакетуудыг үр ашигтай дамжуулахад зориулагдсан. Өгөгдөл дамжуулалт нь слотуудад явагддаг бөгөөд нэг дамжуулалтаар илгээгдсэн хамгийн олон слот нь 5 байна. 1 эсвэл 3 биш харин 2 эсвэл 4 слот ашигладаг дамжуулах горимууд байдаг. 5 слотод та холболтын хурдаар 679 байт хүртэл дамжуулах боломжтой. 2 Mbit/s ба 1021 байт хүртэл 3 Mbit/s хурдтай, 3 - 367 ба 552 байт хурдтай.

AAC, aptX болон LDAC кодлогчгүй чихэвчний дууг сайжруулахын тулд бид Bluetooth стекийг өөрчилдөг.

Хэрэв бид 679 эсвэл 1021 байтаас бага өгөгдөл дамжуулахыг хүсч байгаа боловч 367 эсвэл 552 байтаас илүү дамжуулахыг хүсвэл дамжуулалт нь 5 слотыг авах бөгөөд өгөгдөл нь нэгэн зэрэг дамжих бөгөөд энэ нь дамжуулалтын үр ашгийг бууруулдаг.

AAC, aptX болон LDAC кодлогчгүй чихэвчний дууг сайжруулахын тулд бид Bluetooth стекийг өөрчилдөг.

SBC нь Хос сувгийн горимд, 44100 Гц давтамжтай, Bitpool 38 параметртэй, фрэйм ​​бүрт 16 блок, 8 давтамжийн мужтай, аудиог 164 байт фрейм болгон кодлодог, битийн хурд нь 452 kbps.
Аудиог 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 Mbit/s-ийн хувьд 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 kbps, 384 ​​кГц-ийн хувьд 48 kbps, мөн хамгийн их шаардлагатай давтамж руу "бит-шилж" чадахгүй. . 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 Mbps EDR холболтыг дэмждэг чихэвч дээр 551 kbps-ийн битийн хурд нь aptX HD-тэй дүйцэхүйц дуу гаргадаг.

Та үүнээс ч илүүг хийж чадах уу?

Android засвар нь мөн 2 Mbps 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-хөгжүүлэгчид.

Дууны ялгааг харьцуулах

Би шууд хөтөч дээр SBC (мөн aptX болон aptX HD) руу аудио кодчилдог вэб үйлчилгээг бодит цаг хугацаанд хийсэн. Үүний тусламжтайгаар та ямар ч утастай чихэвч, чанга яригч, дуртай хөгжим дээрээ Bluetooth-ээр аудио дамжуулахгүйгээр өөр өөр SBC профайл болон бусад кодлогчийн дууг харьцуулж, аудио тоглуулж байхдаа кодчиллын параметрүүдийг шууд өөрчлөх боломжтой.
btcodecs.valdikss.org.ru/sbc-encoder

Android хөгжүүлэгчидтэй холбоо барина уу

Би Google-ийн олон Bluetooth стек хөгжүүлэгчдээс Android-ийн үндсэн салбар болох AOSP-д засвар оруулах талаар бодож үзэхийг хүссэн боловч ганц ч хариу ирээгүй. Миний засварууд Android-д зориулсан Gerrit засварын систем мөн холбоотой хэнээс ч тайлбар хийгээгүй хэвээр байна.
Хэрэв би Google-ийн хөгжүүлэгчидтэй холбогдож, SBC HD-г Android-д авчрахад тусламж авбал би баяртай байх болно. Gerrit дахь засвар аль хэдийн хуучирсан (энэ нь анхны хувилбаруудын нэг юм) бөгөөд хөгжүүлэгчид миний өөрчлөлтийг сонирхож байвал би үүнийг шинэчлэх болно (үүнийг шинэчлэх нь надад амаргүй, надад Android Q-тай тохирох төхөөрөмж байхгүй байна. ).

дүгнэлт

LineageOS, Resurrection Remix болон crDroid программтай ухаалаг гар утасны хэрэглэгчид яг одоо дууны чанарыг сайжруулж, Bluetooth төхөөрөмжийн тохиргооноос энэ сонголтыг идэвхжүүлэхэд л хангалттай. Линукс хэрэглэгчид суулгаснаар SBC битийн хурдыг нэмэгдүүлэх боломжтой Пали Рохараас авсан нөхөөс, энэ нь бусад зүйлсээс гадна aptX, aptX HD болон FastStream кодлогчийн дэмжлэгийг нэмдэг.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх