AAC, aptX और LDAC कोडेक्स के बिना हेडफ़ोन पर ध्वनि को बेहतर बनाने के लिए ब्लूटूथ स्टैक को संशोधित करना

इस लेख को पढ़ने से पहले, यह अनुशंसा की जाती है कि आप पिछले लेख को पढ़ें: ब्लूटूथ के माध्यम से ऑडियो: अंग्रेजी में प्रोफाइल, कोडेक्स और डिवाइस / के बारे में जितना संभव हो उतना

वायरलेस हेडफ़ोन के कुछ उपयोगकर्ता मानक एसबीसी ब्लूटूथ कोडेक का उपयोग करते समय खराब ऑडियो गुणवत्ता और उच्च आवृत्तियों की कमी को नोट करते हैं, जो सभी ऑडियो उपकरणों का समर्थन करता है। ध्वनि में सुधार करने के लिए एक लगातार सिफारिश उन उपकरणों और हेडफ़ोन को खरीदने की है जो aptX और LDAC कोडेक्स का समर्थन करते हैं। इन कोडेक्स को लाइसेंस फीस की आवश्यकता होती है, इसलिए उनके समर्थन वाले डिवाइस अधिक महंगे हैं।

यह पता चला है कि एसबीसी की निम्न गुणवत्ता ब्लूटूथ स्टैक और हेडफोन सेटिंग्स की कृत्रिम सीमाओं के कारण है, और इस प्रतिबंध को किसी भी मौजूदा उपकरणों पर सॉफ्टवेयर परिवर्तन द्वारा स्मार्टफोन या कंप्यूटर पर खतना किया जा सकता है।

एसबीसी कोडेक

SBC कोडेक के पास कई अलग-अलग पैरामीटर हैं जो कनेक्शन सेटअप चरण के दौरान संगत हैं। उनमें से हैं:

  • चैनलों की संख्या और प्रकार: संयुक्त स्टीरियो, स्टीरियो, दोहरी चैनल, मोनो;
  • आवृत्ति बैंड की संख्या: 4 या 8;
  • पैकेज में ब्लॉकों की संख्या: 4, 8, 12, 16;
  • परिमाणीकरण बिट आवंटन एल्गोरिथ्म: लाउडनेस, एसएनआर;
  • परिमाणीकरण (बिटपूल) में प्रयुक्त बिट्स के पूल का अधिकतम और न्यूनतम मूल्य: आमतौर पर, 2 से 53 तक।


डिकोडिंग डिवाइस को इन मापदंडों के किसी भी संयोजन का समर्थन करना चाहिए। एनकोडर सभी को लागू नहीं कर सकता है।
मौजूदा ब्लूटूथ स्टैक, एक नियम के रूप में, निम्नलिखित प्रोफ़ाइल पर सहमत हैं: संयुक्त स्टीरियो, 8 बैंड, 16 ब्लॉक, लाउडनेस, बिटपूल 2..53। यह प्रोफ़ाइल 328 kbps की बिट दर के साथ 44.1 kHz ऑडियो को एन्कोड करता है।
बिटपूल पैरामीटर सीधे एकल प्रोफाइल के भीतर बिटरेट को प्रभावित करता है: यह जितना अधिक होगा, बिटरेट उतना ही उच्च होगा, और इसलिए गुणवत्ता।
हालांकि, बिटपूल पैरामीटर एक विशिष्ट प्रोफ़ाइल से बंधा नहीं है; अन्य मापदंडों का भी बिट दर पर प्रभाव पड़ता है: प्रकार के चैनल, आवृत्ति बैंड की संख्या, ब्लॉकों की संख्या। आप बिटपूल को बदले बिना गैर-मानक प्रोफाइल पर बातचीत करके अप्रत्यक्ष रूप से बिटरेट को बढ़ा सकते हैं।

ि= frac8  length times rate 


एसबीसी बिटरेट फॉर्मूला


उदाहरण के लिए, ड्यूल चैनल मोड प्रत्येक चैनल के लिए पूरे बिटपूल का उपयोग करके, अलग-अलग चैनलों को एनकोड करता है। संयुक्त स्टीरियो के बजाय दोहरी चैनल का उपयोग करने के लिए डिवाइस को मजबूर करके, हमें उसी अधिकतम बिटपूल मूल्य के साथ लगभग दोगुना बिटरेट मिलता है: 617 केबीपीएस।
मेरी राय में, अनुमोदन के स्तर पर एक गैर-प्रोफाइल बिटपूल मूल्य का उपयोग करना A2DP मानक का दोष है, जिसके कारण SBC गुणवत्ता का कृत्रिम अंग बन गया। यह बिट्रेट से सहमत होना समझदारी होगी, बिटपूल नहीं।

ये निश्चित मूल्य, बिटपूल और बिटरेट, उच्च गुणवत्ता वाले ऑडियो के लिए अनुशंसित मूल्यों के साथ एक तालिका से उत्पन्न होते हैं। लेकिन सिफारिश इन मूल्यों तक सीमित रहने का कारण नहीं है।

ब्लूटूथ SBC प्रोफ़ाइल तालिका

A2DP v1.2 विनिर्देश, जो 2007 से 2015 तक सक्रिय था, को सभी डिकोडिंग उपकरणों को 512 kr: तक बिट्रेट के साथ सही ढंग से काम करने की आवश्यकता होती है:

एसएनके के डिकोडर सभी संभावित बिटपूल मानों का समर्थन करेंगे जो अधिकतम बिट दर से अधिक नहीं होते हैं। यह प्रोफ़ाइल मोनो के लिए उपलब्ध अधिकतम बिट दर 320kb / s और दो-चैनल मोड के लिए 512kb / s को सीमित करता है।


विनिर्देश के नए संस्करण में कोई बिटरेट सीमा नहीं है। यह माना जाता है कि 2015 के बाद जारी किए गए आधुनिक हेडफ़ोन और EDR का समर्थन modern730 केबीपीएस तक बिट्राट का समर्थन कर सकते हैं।

किसी कारण से, लिनक्स ब्लूटूथ स्टैक I (पल्सएडियो), एंड्रॉइड, ब्लैकबेरी और मैकओएस में बिटपूल पैरामीटर के अधिकतम मूल्य पर कृत्रिम सीमाएं हैं, जो सीधे अधिकतम बिटरेट को प्रभावित करता है। लेकिन यह सबसे बड़ी समस्या नहीं है, लगभग सभी हेडफ़ोन अधिकतम बिटपूल मान को 53 तक सीमित करते हैं।
जैसा कि मैं पहले से ही सुनिश्चित करने में कामयाब रहा, अधिकांश डिवाइस बिना किसी रुकावट और दरार के 551 kbit / s की एक बिटरेट के साथ संशोधित ब्लूटूथ स्टैक पर ठीक काम करते हैं। लेकिन इस तरह की बिटरेट को सामान्य परिस्थितियों में सामान्य ब्लूटूथ स्टैक पर कभी भी बातचीत नहीं की जाएगी।

ब्लूटूथ स्टैक को संशोधित करना

कोई भी ब्लूटूथ स्टैक जो A2DP मानक के अनुकूल है, में दोहरी चैनल मोड के लिए समर्थन है, लेकिन इसे इंटरफ़ेस से सक्रिय करना संभव नहीं है।

आइए इंटरफ़ेस में एक स्विच जोड़ें! मैंने एंड्रॉइड 8.1 और एंड्रॉइड 9 के लिए पैच बनाए जो स्टैक पर डुअल चैनल के लिए पूर्ण समर्थन जोड़ते हैं, मोड को स्विच करने वाले मेनू को डेवलपर टूल में जोड़ते हैं, और एसबीसी को दोहरे चैनल समर्थन के साथ संसाधित करते हैं जैसे कि यह aptX, AAC या LDAC जैसे अतिरिक्त कोडेक थे। ब्लूटूथ डिवाइस की सेटिंग्स में एक चेकमार्क जोड़कर एंड्रॉइड इसे एचडी ऑडियो कहता है। यहाँ यह कैसा दिखता है:

छवि

Android 9 के लिए पैच
Android 8.1 के लिए पैच

जब चेकबॉक्स सक्रिय हो जाता है, तो ब्लूटूथ ऑडियो 551 kbps की बिटरेट के साथ प्रेषित होना शुरू हो जाता है यदि हेडफ़ोन 3 एमबीपीएस या 452 केबीपीएस पर कनेक्शन का समर्थन करता है यदि हेडफ़ोन केवल 2 एमबीपीएस का समर्थन करता है।

यह पैच निम्नलिखित वैकल्पिक फर्मवेयर में शामिल है:
  • LineageOS
  • पुनरुत्थान रीमिक्स
  • crDroid


551 और 452 kbit / s कहां से आए?

ब्लूटूथ स्प्लिट-एयर तकनीक को बड़े फिक्स्ड-आकार के पैकेट को कुशलता से स्थानांतरित करने के लिए डिज़ाइन किया गया है। डेटा स्लॉट्स द्वारा प्रेषित होता है, एक ट्रांसमिशन में भेजे गए स्लॉट्स की सबसे बड़ी संख्या 5. ट्रांसमिशन मोड भी होते हैं जो 1 या 3 स्लॉट्स का उपयोग करते हैं, लेकिन 2 या 4 नहीं। 5 स्लॉट्स में, आप 2 एमबीपीएस की कनेक्शन गति पर 679 बाइट्स तक स्थानांतरित कर सकते हैं। 3 एमबीपीएस की गति से 1021 बाइट्स तक, और क्रमशः 3 - 367 और 552 बाइट्स में।

छवि

यदि हम 679 या 1021 बाइट्स की तुलना में कम डेटा ट्रांसफर करना चाहते हैं, लेकिन 367 या 552 बाइट्स से अधिक है, तो ट्रांसफर में अभी भी 5 स्लॉट होंगे, और डेटा एक ही समय में प्रसारित होगा, जिससे ट्रांसमिशन दक्षता कम हो जाती है।

छवि

डबल चैनल मोड में एसबीसी, बिटपूल 38 मापदंडों के साथ 44100 हर्ट्ज ऑडियो पर, 16 फ्रेम प्रति ब्लॉक, 8 आवृत्ति रेंज, 452 केबीपीएस की बिटरेट के साथ आकार में 164 बाइट्स के फ्रेम में ऑडियो को एन्कोड करता है।
ऑडियो को L2CAP और AVDTP ट्रांसफर प्रोटोकॉल में एनक्रिप्टेड होना चाहिए, जो ऑडियो पेलोड से 16 बाइट लेते हैं।

\ start {align *} framelength & = 4 + \ frac {subbands \ टाइम्स चैनल} {2} + \\ & \ {शुरू {केसेस} \ frac {ब्लॉक \ टाइम्स चैनल \ बिट बिटपूल} {8} & \ text { यदि मोनो या दोहरे चैनल मोड} \\ \ frac {सबबेंड्स + ब्लॉक बिटपूल} {8} और \ टेक्स्ट {यदि संयुक्त स्टीरियो मोड} \\ \ frac {ब्लॉक बिटपूल} {8} और \ टेक्स्ट {स्टीरियो मोड} \\ \ end {मामलों} \ end {संरेखित करें}}





इस प्रकार, 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 फ़्रेम भेजने होंगे, जो ट्रांसमिशन दक्षता को कम करता है, प्रति पैकेट ऑडियो ट्रांसमिट की मात्रा कम करता है, और जल्दी से खराब रेडियो स्थितियों में ऑडियो को हकलाना होगा।

उसी तरह, 3 एमबीपीएस के एक ईडीआर के लिए 551 kbit / s की बिट दर का चयन किया गया: बिटपूल 47 के साथ, एक फ्रेम में 16 ब्लॉक, 8 आवृत्ति रेंज, फ्रेम आकार 200 बाइट्स है, जिसमें 551 बिटबिट / s का बिटरेट है। 5 फ्रेम या 14.6 एमएस संगीत एक पैकेज में फिट बैठता है।

सभी एसबीसी मापदंडों की गणना के लिए एल्गोरिथ्म काफी जटिल है, यदि आप मैन्युअल रूप से गिनते हैं, तो आप आसानी से भ्रमित हो सकते हैं, इसलिए मैंने रुचि रखने वालों की मदद करने के लिए एक इंटरैक्टिव कैलकुलेटर बनाया: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

यह सब क्यों जरूरी है?

AptX कोडेक की ध्वनि गुणवत्ता के बारे में लोकप्रिय धारणा के विपरीत, यह 328 kbps के मानक बिट दर के साथ SBC की तुलना में कुछ फाइलों पर खराब परिणाम दे सकता है।

एसबीसी डायनामिक रूप से आवृत्तियों के लिए आवृत्तियों को आवंटित करता है, जो "नीचे से ऊपर" आधार पर कार्य करता है। यदि कम और मध्य आवृत्तियों के लिए संपूर्ण बिटरेट का उपयोग किया गया था, तो उच्च आवृत्तियां "कट ऑफ" होंगी (इसके बजाय सिल्की होगी)।
aptX लगातार बिट्स की एक ही संख्या के साथ आवृत्ति बैंड की मात्रा निर्धारित करता है, यही कारण है कि इसमें एक निरंतर बिटरेट है: 442 kHz के लिए 352 kbit / s, 48 ​​kHz के लिए 384 kbit / s, और यह उन आवृत्तियों के लिए "बिट्स" स्थानांतरित नहीं कर सकता है। उनकी सबसे ज्यादा जरूरत है। SBC के विपरीत, aptX आवृत्तियों को "काट" नहीं करेगा, लेकिन ऑडियो की गतिशील सीमा को कम करते हुए, और कभी-कभी चारित्रिक क्रैक का परिचय देता है। दूसरी ओर, SBC, "विवरण खाती है" - सबसे शांत क्षेत्रों को छोड़ देता है।
SBC 328k की तुलना में, औसतन, aptX एक व्यापक आवृत्ति रेंज के साथ संगीत के लिए कम विरूपण का परिचय देता है, लेकिन कभी-कभी यह संकीर्ण आवृत्ति रेंज और व्यापक गतिशील रेंज के साथ संगीत पर जीतता है।

एक विशेष मामले पर विचार करें। पियानो रिकॉर्ड करने के लिए स्पेक्ट्रम:
छवि

मुख्य ऊर्जा 0 से 4 kHz तक की आवृत्तियों में निहित है, और 10 kHz तक रहती है।
AptX में संपीड़ित फ़ाइल का स्पेक्ट्रोग्राम इस प्रकार है:
छवि

और इसलिए यह SBC 328k दिखता है।
छवि

यह देखा जा सकता है कि SBC 328k समय-समय पर पूरी तरह से 16 kHz से ऊपर की सीमा को बंद कर देता है, और इस मूल्य से नीचे की श्रेणियों के लिए सभी उपलब्ध बिटरेट का सेवन करता है। हालाँकि, aptX ने मानव कानों द्वारा सुने जाने वाले फ़्रीक्वेंसी स्पेक्ट्रम में अधिक विकृति का परिचय दिया, जिसे aptX स्पेक्ट्रोग्राम (भंगुर, अधिक विकृति) से घटाए गए मूल स्पेक्ट्रोग्राम पर देखा जा सकता है:
छवि

जबकि SBC 328k ने 0 से 10 kHz तक की सीमा में सिग्नल को कम गड़बड़ किया, और बाकी को काट दिया -
छवि

485k एसबीसी बिटरेट बैंड को डिस्कनेक्ट किए बिना, पूरी आवृत्ति रेंज को बचाने के लिए पर्याप्त था।
छवि

इस संरचना पर SBC 485k 0-15 kHz की सीमा में aptX से काफी आगे है, और एक छोटे लेकिन अभी भी ध्यान देने योग्य अंतर के साथ - 15-22 kHz (कम गहरा, कम विरूपण):
छवि

मूल ऑडियो, एसबीसी और aptX का संग्रह

उच्च-बिट SBC पर स्विच करने पर, आपको ध्वनि मिल जाएगी, अक्सर किसी भी हेडफ़ोन पर aptX से बेहतर। 3 एमबीपीएस ईडीआर कनेक्शन का समर्थन करने वाले हेडफ़ोन पर, 551 केबीपीएस बिट दर एपेक्स एचडी के लिए ध्वनि तुलनीय है।

क्या मुझे और हो सकता है?

एंड्रॉइड के लिए पैच में ईडीआर डिवाइस 2 एमबीपीएस के लिए बिटरेट को और अधिक बढ़ाने का विकल्प है। आप जटिल रेडियो परिस्थितियों में संचरण स्थिरता को कम करने की कीमत पर 452 केबीपीएस से 595 केबीपीएस तक बिटरेट बढ़ा सकते हैं।
बस वेरिएबल persist.bluaxy.sbc_hd_higher_bitrate को 1 पर सेट करें।
 # setprop persist.bluetooth.sbc_hd_higher_bitrate 1 

चरम बिटरेट पैच को अब तक केवल वंशावली 15.1 में स्वीकार किया गया है, लेकिन 16.0 में नहीं।

डिवाइस संगतता

एसबीसी डुअल चैनल लगभग सभी हेडफ़ोन, स्पीकर और कार हेड यूनिट द्वारा समर्थित है। यह आश्चर्य की बात नहीं है - मानक किसी भी डिकोडिंग डिवाइस में अपने समर्थन को निर्धारित करता है। उपकरणों की एक छोटी संख्या है, जिस पर यह मोड समस्याओं का कारण बनता है, लेकिन ये एकल उदाहरण हैं।
संगत उपकरणों पर अधिक विवरण w3bsit3-dns.com या xda- Developers पर देखे जा सकते हैं।

ध्वनि अंतर की तुलना

मैंने वास्तविक समय में ब्राउज़र में सही तरीके से SBC (साथ ही aptX और aptX HD) में एक वेब सेवा एन्कोडिंग ऑडियो बनाया। इसके साथ, आप विभिन्न एसबीसी प्रोफाइल और अन्य कोडेक्स की ध्वनि की तुलना कर सकते हैं, वास्तव में ब्लूटूथ के माध्यम से ऑडियो प्रसारित करने के बिना, किसी भी वायर्ड हेडफ़ोन, स्पीकर, और अपने पसंदीदा संगीत पर, साथ ही ऑडियो प्लेबैक के दौरान सीधे एन्कोडिंग सेटिंग्स को बदल सकते हैं।
btcodecs.valdikss.org.ru/sbc-encoder

Android डेवलपर्स से संपर्क करें

मैंने मुख्य ब्लूटूथ शाखा - एओएसपी में पैच को शामिल करने पर विचार करने के अनुरोध के साथ Google ब्लूटूथ स्टैक के कई डेवलपर्स को लिखा था, लेकिन एक भी जवाब नहीं मिला। एंड्रॉइड के लिए गेरिट पैच सिस्टम में मेरे पैच भी शामिल किए गए किसी भी टिप्पणी के बिना छोड़ दिए गए हैं।
मुझे खुशी होगी अगर मुझे Google से डेवलपर्स और Android में SBC HD के कार्यान्वयन के संबंध में मदद मिली। गेरिट पैच पहले से पुराना है (यह शुरुआती संशोधनों में से एक है), और मैं इसे अपडेट करूंगा यदि डेवलपर्स मेरे बदलावों में रुचि रखते हैं (इसे अपडेट करना मेरे लिए आसान नहीं है, मेरे पास एंड्रॉइड क्यू संगत डिवाइस नहीं हैं)।

निष्कर्ष

वंशावली, पुनरुत्थान रीमिक्स और crDroid फर्मवेयर वाले स्मार्टफ़ोन के उपयोगकर्ता अब बेहतर ध्वनि गुणवत्ता के साथ संतुष्ट हो सकते हैं, बस ब्लूटूथ डिवाइस की सेटिंग में विकल्प को सक्रिय करें। लिनक्स उपयोगकर्ता पाली रोहर से एक पैच स्थापित करके एक बढ़ी हुई एसबीसी बिटरेट भी प्राप्त कर सकते हैं, जो अन्य बातों के अलावा, aptX, aptX HD और FastStream कोडेक के लिए समर्थन जोड़ता है।

Source: https://habr.com/ru/post/hi455316/


All Articles