Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

Նախքան այս հոդվածը կարդալը, խորհուրդ է տրվում կարդալ նախորդ հոդվածը. Աուդիո Bluetooth-ի միջոցով. առավելագույն մանրամասներ պրոֆիլների, կոդեկների և սարքերի մասին

Անլար ականջակալների որոշ օգտատերեր հաղորդում են ձայնի վատ որակի և բարձր հաճախականությունների բացակայության դեպքում, երբ օգտագործում են ստանդարտ SBC Bluetooth կոդեկ, որն ապահովվում է բոլոր աուդիո սարքերով: Ձայնի բարելավման ընդհանուր առաջարկությունն է՝ գնել սարքեր և ականջակալներ, որոնք աջակցում են aptX և LDAC կոդեկներին: Այս կոդեկները պահանջում են լիցենզավորման վճարներ, ուստի դրանք աջակցող սարքերն ավելի թանկ են:

Պարզվում է, որ SBC-ի ցածր որակը պայմանավորված է Bluetooth-ի կույտերի և ականջակալների կարգավորումների արհեստական ​​սահմանափակումներով, և այդ սահմանափակումը հնարավոր է շրջանցել առկա ցանկացած սարքի վրա՝ սմարթֆոնի կամ համակարգչի ծրագրային փոփոխության միջոցով:

Կոդեկ SBC

SBC կոդեկն ունի բազմաթիվ տարբեր պարամետրեր, որոնք համաձայնեցվում են կապի տեղադրման փուլում: Նրանց մեջ:

  • Ալիքների քանակը և տեսակը՝ համատեղ ստերեո, ստերեո, երկալիք, մոնո;
  • Հաճախականությունների տիրույթների քանակը՝ 4 կամ 8;
  • Փաթեթում բլոկների քանակը՝ 4, 8, 12, 16;
  • Քվանտացման ընթացքում բիթերի բաշխման ալգորիթմ. Loudness, SNR;
  • Քվանտացման ժամանակ օգտագործվող բիթերի ֆոնդի առավելագույն և նվազագույն արժեքը (bitpool) սովորաբար 2-ից 53:

Ապակոդավորման սարքը պետք է ապահովի այս պարամետրերի ցանկացած համակցություն: Կոդավորիչը կարող է ամեն ինչ չկատարել:
Գոյություն ունեցող Bluetooth կույտերը սովորաբար համաձայնվում են հետևյալ պրոֆիլի վրա՝ համատեղ ստերեո, 8 ժապավեն, 16 բլոկ, բարձրաձայնություն, բիթփուլ 2..53: Այս պրոֆիլը կոդավորում է 44.1 կՀց աուդիո 328 կբիթ/վրկ բիթ արագությամբ:
Bitpool պարամետրը ուղղակիորեն ազդում է մեկ պրոֆիլի բիթերի արագության վրա. որքան բարձր է այն, այնքան բարձր է բիթերի արագությունը և, հետևաբար, որակը:
Այնուամենայնիվ, bitpool պարամետրը կապված չէ որոշակի պրոֆիլի հետ. Բիթերի արագության վրա մեծապես ազդում են նաև այլ պարամետրեր՝ կապուղիների տեսակը, հաճախականության տիրույթների քանակը, բլոկների քանակը: Դուք կարող եք բարձրացնել բիթերի արագությունը անուղղակիորեն, համաձայնեցնելով ոչ ստանդարտ պրոֆիլներ, առանց բիթփուլը փոխելու:

Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

SBC բիթային արագության հաշվարկման բանաձև

Օրինակ, Dual Channel ռեժիմը կոդավորում է ալիքները առանձին՝ օգտագործելով ամբողջ բիթփուլը յուրաքանչյուր ալիքի համար: Ստիպելով սարքին Joint Stereo-ի փոխարեն օգտագործել Dual Channel, մենք ստանում ենք գրեթե կրկնակի բիթ արագություն նույն առավելագույն բիթփուլային արժեքով՝ 617 kbps:
Իմ կարծիքով, բանակցությունների փուլում պրոֆիլի հետ չկապված bitpool արժեքի օգտագործումը A2DP ստանդարտի թերություն է, որը հանգեցրեց SBC որակի արհեստական ​​սահմանափակմանը: Ավելի խելամիտ կլիներ բիտրեյթի շուրջ բանակցելը, քան բիթփուլը:

Այս ֆիքսված Bitpool և Bitrate արժեքները բխում են առաջարկվող արժեքներով աղյուսակից՝ բարձրորակ ձայնի համար օգտագործելու համար: Բայց հանձնարարականը պատճառ չէ սահմանափակվելու այս արժեքներով:

Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

A2DP v1.2 հստակեցումը, որն ակտիվ էր 2007-ից 2015 թվականներին, պահանջում է, որ բոլոր ապակոդավորող սարքերը ճիշտ աշխատեն մինչև 512 կբ/վ արագությամբ:

SNK-ի ապակոդավորիչը պետք է ապահովի բոլոր հնարավոր բիթփուլային արժեքները, որոնք չեն հանգեցնում առավելագույն բիթային արագության գերազանցմանը: Այս պրոֆիլը սահմանափակում է հասանելի առավելագույն բիթային արագությունը մինչև 320 կբ/վ մոնո և 512 կբ/վ երկալիք ռեժիմների համար:

Հստակեցման նոր տարբերակում բիթերի արագության սահմանափակում չկա: Ենթադրվում է, որ 2015 թվականից հետո թողարկված ժամանակակից ականջակալները, որոնք աջակցում են EDR-ին, կարող են սպասարկել մինչև ≈730 կբիթ/վրկ բիթային արագություն:

Չգիտես ինչու, Linux-ի (PulseAudio), Android-ի, Blackberry-ի և macOS-ի Bluetooth փաթեթները, որոնք ես փորձարկեցի, արհեստական ​​սահմանափակումներ ունեն bitpool պարամետրի առավելագույն արժեքի վրա, որն ուղղակիորեն ազդում է առավելագույն բիթերի արագության վրա: Բայց սա ամենամեծ խնդիրը չէ, գրեթե բոլոր ականջակալները նաև սահմանափակում են բիթփուլի առավելագույն արժեքը մինչև 53:
Ինչպես արդեն տեսել եմ, սարքերի մեծամասնությունը կատարելապես աշխատում է 551 կբ/վ բիթ արագությամբ փոփոխված Bluetooth ստեկի վրա՝ առանց ընդհատումների կամ ճռճռոցի: Բայց նման բիթային արագությունը երբեք հետևողական չի լինի նորմալ պայմաններում, սովորական Bluetooth բլիթների վրա:

Փոփոխում Bluetooth փաթեթը

Ցանկացած Bluetooth փաթեթ, որը համատեղելի է A2DP ստանդարտի հետ, աջակցում է Dual Channel ռեժիմին, սակայն այն հնարավոր չէ ակտիվացնել միջերեսից:

Եկեք ինտերֆեյսին ավելացնենք անջատիչ: Ես պատրաստել եմ պատչեր Android 8.1-ի և Android 9-ի համար, որոնք ավելացնում են Dual Channel-ի ամբողջական աջակցությունը փաթեթին, ռեժիմը ավելացնում է ռեժիմի փոխարկիչի ընտրացանկը մշակող գործիքների մեջ և վերաբերվում է Dual Channel-ով միացված SBC-ներին, ասես դրանք լինեն լրացուցիչ կոդեկ, ինչպիսին aptX-ն է: , AAC կամ LDAC (Android-ն այս ձայնը անվանում է HD Audio)՝ նշելով Bluetooth սարքի կարգավորումներին: Ահա թե ինչ տեսք ունի.

Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

Patch Android 9-ի համար
Patch 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 բայթ:

Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

Եթե ​​մենք ուզում ենք փոխանցել ավելի քիչ, քան 679 կամ 1021 բայթ, բայց ավելի քան 367 կամ 552 բայթ, փոխանցումը դեռ կտևի 5 սլոտ, և տվյալները կփոխանցվեն միաժամանակ, ինչը նվազեցնում է փոխանցման արդյունավետությունը։

Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

SBC-ը Dual Channel ռեժիմում, 44100 Հց հաճախականությամբ աուդիո Bitpool 38 պարամետրերով, 16 բլոկ մեկ կադրում, 8 հաճախականության միջակայք, ձայնը կոդավորում է 164 բայթ շրջանակների մեջ, 452 կբիթ/վ բիթ արագությամբ:
Ձայնը պետք է ներառված լինի L2CAP և AVDTP փոխանցման արձանագրություններում, որոնք 16 բայթ են վերցնում աուդիո ծանրաբեռնվածությունից:

Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

Այսպիսով, մեկ Bluetooth փոխանցումը 5 սլոտներով կարող է տեղավորել 4 աուդիո շրջանակ.

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

Ուղարկվող փաթեթում մենք տեղավորում ենք 11.7 մվ աուդիո տվյալներ, որոնք կփոխանցվեն 3.75 մվ-ում, և փաթեթում մնացել է 6 չօգտագործված բայթ:
Եթե ​​մի փոքր բարձրացնեք բիթփուլը, այլևս հնարավոր չի լինի մեկ փաթեթի մեջ 4 աուդիո շրջանակներ հավաքել: Դուք ստիպված կլինեք ուղարկել 3 կադր միաժամանակ, ինչը նվազեցնում է փոխանցման արդյունավետությունը, նվազեցնում է մեկ ուղարկվող ձայնի քանակը և ավելի արագ կհանգեցնի ձայնի կակազման վատ ռադիոյի պայմաններում:

Նույն կերպ ընտրվել է 551 կբիտ/վրկ բիթային արագություն EDR 3 Մբիթ/վրկ՝ Bitpool 47-ով, 16 բլոկ մեկ կադրում, 8 հաճախականության միջակայք, կադրի չափը 200 բայթ է, 551 կբիտ/վ բիթ արագությամբ։ Մեկ փաթեթը պարունակում է 5 կադր կամ 14.6 մվ երաժշտություն:

SBC-ի բոլոր պարամետրերի հաշվարկման ալգորիթմը բավականին բարդ է, դուք հեշտությամբ կարող եք շփոթվել, եթե հաշվում եք ձեռքով, այնպես որ ես պատրաստեցի ինտերակտիվ հաշվիչ, որպեսզի օգնեմ հետաքրքրվողներին. btcodecs.valdikss.org.ru/sbc-bitrate-calculator

Ինչու է այս ամենը անհրաժեշտ:

Հակառակ aptX կոդեկի ձայնի որակի մասին տարածված կարծիքի, որոշ ֆայլերի վրա այն կարող է ավելի վատ արդյունքներ տալ, քան SBC-ն՝ 328 կբ/վ ստանդարտ բիթային արագությամբ:

SBC-ն դինամիկ կերպով բաշխում է քվանտացման բիթերը հաճախականության տիրույթներին ցածրից բարձր հիմունքներով: Եթե ​​ամբողջ բիթային արագությունը օգտագործվել է ցածր և միջին հաճախականությունների համար, ապա բարձր հաճախականությունները «կկտրվեն» (փոխարենը կլինի լռություն):
aptX-ը քվանտացնում է նույն թվով բիթերով հաճախականությունների տիրույթները, այդ իսկ պատճառով այն ունի հաստատուն բիթային արագություն՝ 352 կբ/վ 44.1 կՀց-ի համար, 384 կբ/վրկ՝ 48 կՀց-ի համար, և այն չի կարող «բիթ տեղափոխել» այն հաճախականություններին, որոնք դրանց առավել կարիքն ունեն։ . Ի տարբերություն SBC-ի, aptX-ը չի «կտրի» հաճախականությունները, այլ կավելացնի դրանց քվանտացման աղմուկը՝ նվազեցնելով ձայնի դինամիկ տիրույթը և երբեմն ներկայացնելով բնորոշ ճռռոց: SBC-ն «ուտում է դետալները»՝ հեռացնում է ամենահանգիստ տարածքները:
Միջին հաշվով, համեմատած SBC 328k-ի հետ, aptX-ը ավելի քիչ աղավաղում է ներկայացնում լայն հաճախականության տիրույթ ունեցող երաժշտության մեջ, սակայն նեղ հաճախականության տիրույթով և լայն դինամիկ տիրույթ ունեցող երաժշտության մեջ SBC 328k-ը երբեմն հաղթում է:

Դիտարկենք հատուկ դեպք. Դաշնամուր նվագող ձայնագրության սպեկտրոգրամ.
Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

Հիմնական էներգիան գտնվում է 0-ից 4 կՀց հաճախականությունների մեջ և շարունակվում է մինչև 10 կՀց:
AptX-ում սեղմված ֆայլի սպեկտրոգրամն այսպիսի տեսք ունի.
Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

Եվ ահա թե ինչ տեսք ունի SBC 328k:
Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

Կարելի է տեսնել, որ SBC 328k-ը պարբերաբար ամբողջությամբ անջատել է 16 կՀց-ից բարձր տիրույթը և ծախսել ողջ հասանելի բիթային արագությունը այս արժեքից ցածր տիրույթներում: Այնուամենայնիվ, aptX-ը ավելի շատ աղավաղում է մտցրել մարդու ականջին լսելի հաճախականության սպեկտրի մեջ, ինչպես երևում է aptX սպեկտրոգրամից հանված բնօրինակի սպեկտրոգրամում (որքան պայծառ է, այնքան ավելի շատ աղավաղում).
Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

Մինչ SBC 328k-ը ավելի քիչ փչացրեց ազդանշանը 0-ից 10 կՀց միջակայքում, և անջատեց մնացածը.
Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

SBC-ի 485k բիթային արագությունը բավարար էր ամբողջ հաճախականության տիրույթը պահպանելու համար՝ առանց տիրույթների անջատման:
Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

SBC 485k-ն այս ուղու վրա զգալիորեն առաջ է aptX-ից 0-15 կՀց տիրույթում, ավելի փոքր, բայց դեռ նկատելի տարբերությամբ՝ 15-22 կՀց (որքան մուգ, այնքան քիչ աղավաղումը).
Մենք փոփոխում ենք Bluetooth փաթեթը՝ առանց AAC, aptX և LDAC կոդեկների ականջակալների ձայնը բարելավելու համար

Բնօրինակ աուդիո, 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-ը աջակցվում է գրեթե բոլոր ականջակալների, բարձրախոսների և մեքենայի գլխամասերի կողմից: Սա զարմանալի չէ. ստանդարտը պահանջում է իր աջակցությունը ցանկացած վերծանման սարքերում: Կան փոքր թվով սարքեր, որոնց վրա այս ռեժիմը խնդիրներ է առաջացնում, բայց դրանք առանձին դեպքեր են:
Համատեղելի սարքերի մասին լրացուցիչ մանրամասներ կարելի է գտնել այստեղ 4 pda կամ XDA-մշակողները.

Ձայնային տարբերությունների համեմատություն

Ես ստեղծել եմ վեբ ծառայություն, որը կոդավորում է ձայնը SBC-ին (ինչպես նաև aptX և aptX HD) իրական ժամանակում, հենց բրաուզերում: Դրա միջոցով դուք կարող եք համեմատել SBC-ի տարբեր պրոֆիլների և այլ կոդեկների ձայնը՝ իրականում առանց Bluetooth-ի միջոցով աուդիո փոխանցելու, ցանկացած լարային ականջակալների, բարձրախոսների և ձեր սիրած երաժշտության վրա, ինչպես նաև ուղղակիորեն փոխել կոդավորման պարամետրերը աուդիո նվագարկելիս:
btcodecs.valdikss.org.ru/sbc-encoder

Կապվեք Android ծրագրավորողների հետ

Ես գրեցի Google-ում Bluetooth stack-ի շատ ծրագրավորողներին՝ խնդրելով մտածել, որ դրանք ներառեն հիմնական Android մասնաճյուղում՝ AOSP-ում, բայց ոչ մի պատասխան չստացա: Իմ կարկատանները ներս են Gerrit կարկատել համակարգ Android-ի համար նույնպես մնաց առանց որևէ մեկի ներգրավված մեկնաբանության:
Ես ուրախ կլինեի, եթե կարողանայի որոշակի օգնություն ստանալ Google-ի ծրագրավորողների հետ կապ հաստատելու և SBC HD-ն Android-ին բերելու համար: Gerrit-ի կարկատումն արդեն հնացել է (սա վաղ վերանայումներից է), և ես այն կթարմացնեմ, եթե մշակողները հետաքրքրվեն իմ փոփոխություններով (ինձ համար հեշտ չէ այն թարմացնել, ես Android Q-ի հետ համատեղելի սարքեր չունեմ։ ).

Ամփոփում

LineageOS, Resurrection Remix և crDroid որոնվածով սմարթֆոնների օգտատերերը կարող են վայելել ձայնի բարելավված որակը հենց հիմա, պարզապես ակտիվացրեք տարբերակը Bluetooth սարքի կարգավորումներում: Linux-ի օգտատերերը կարող են նաև ստանալ SBC բիթերի բարձրացում՝ տեղադրելով կարկատել Pali Rohar-ից, որը, ի թիվս այլ բաների, ավելացնում է աջակցություն aptX, aptX HD և FastStream կոդեկներին:

Source: www.habr.com

Добавить комментарий