نقوم بتعديل مكدس 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 الحالية ، كقاعدة عامة ، توافق على الملف التعريفي التالي: Joint Stereo ، 8 نطاقات ، 16 قطعة ، Loudness ، bitpool 2..53. يشفر ملف التخصيص هذا صوت 44.1 كيلو هرتز بمعدل بت 328 كيلو بت في الثانية.
تؤثر المعلمة bitpool بشكل مباشر على معدل البت داخل ملف تعريف واحد: كلما كان أعلى ، زاد معدل البت ، وبالتالي الجودة.
ومع ذلك ، المعلمة bitpool غير مرتبطة بملف تعريف معين؛ تؤثر المعلمات الأخرى أيضًا على معدل البت: نوع القنوات ، عدد نطاقات التردد ، عدد الفدرات. يمكنك زيادة معدل البت بشكل غير مباشر عن طريق التفاوض على ملفات التعريف غير القياسية دون تغيير bitpool.

bitrate= frac8 timesframe length timessample ratesubbands timesblocks


SBC معدل البت الصيغة


على سبيل المثال ، يعمل وضع القناة المزدوجة على تشفير القنوات بشكل منفصل ، باستخدام bitpool بالكامل لكل قناة. من خلال إجبار الجهاز على استخدام Dual Channel بدلاً من Stereo Stereo ، نحصل على معدل بت مزدوج تقريبًا بنفس قيمة bitpool القصوى: 617 كيلو بت في الثانية.
في رأيي ، فإن استخدام قيمة bitpool غير بارزة في مرحلة الموافقة هو عيب في معيار A2DP ، مما أدى إلى وجود قيود مصطنعة على جودة SBC. سيكون من الحكمة الموافقة على معدل البت وليس bitpool.

تنشأ هذه القيم الثابتة ، Bitpool و Bitrate ، من جدول يحتوي على قيم موصى بها للصوت عالي الجودة. لكن التوصية ليست سببا لتقتصر على هذه القيم.

الجدول الشخصي بلوتوث SBC

تتطلب مواصفات A2DP v1.2 ، التي كانت نشطة من 2007 إلى 2015 ، أن تعمل جميع أجهزة فك التشفير بشكل صحيح مع معدل البت الذي يصل إلى 512 كيلو بايت في الثانية:

يجب أن يدعم مفكك تشفير SNK جميع قيم bitpool الممكنة التي لا تؤدي إلى تجاوز الحد الأقصى لمعدل البتات. يحد ملف التخصيص هذا الحد الأقصى لمعدل البت المتاح إلى 320 كيلو بايت / ثانية للأحادي ، و 512 كيلو بايت / ثانية للأوضاع ثنائية القناة.


لا يوجد حد لمعدل البت في الإصدار الجديد من المواصفات. من المفترض أن سماعات الرأس الحديثة التي تم إصدارها بعد عام 2015 ودعم EDR يمكنها دعم معدل البت حتى -730 كيلو بايت في الثانية.

لسبب ما ، تحتوي مجموعات Linux Linux التي اختبرتها (PulseAudio) و Android و Blackberry و macOS على قيود اصطناعية على الحد الأقصى لقيمة معلمة bitpool ، والتي تؤثر بشكل مباشر على الحد الأقصى لمعدل البت. لكن هذه ليست المشكلة الأكبر ، فمعظم سماعات الرأس تقصر أيضًا الحد الأقصى لقيمة bitpool على 53.
نظرًا لأنني تمكنت بالفعل من التأكد ، فإن معظم الأجهزة تعمل بشكل جيد على رصة Bluetooth معدلة بمعدل بت قدره 551 كيلوبت / ثانية ، دون انقطاع أو فرقعة. ولكن لن يتم التفاوض على مثل هذا المعدل في ظل الظروف العادية ، على أكوام البلوتوث العادية.

تعديل مكدس Bluetooth

أي مكدس Bluetooth متوافق مع معيار A2DP يدعم وضع القناة المزدوجة ، لكن لا يمكن تنشيطه من الواجهة.

دعنا نضيف مفتاح إلى الواجهة! لقد قمت بعمل تصحيحات لنظامي Android 8.1 و Android 9 تضيفان الدعم الكامل للقناة الثنائية إلى المجموعة ، وأضف الوضع إلى قائمة تبديل الوضع إلى أدوات المطورين ، وقم بمعالجة SBC مع دعم القناة المزدوجة كما لو كان برنامج ترميز إضافي مثل aptX أو AAC أو LDAC ( يطلق Android عليه اسم HD Audio) عن طريق إضافة علامة اختيار إلى إعدادات جهاز 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 بايت ، على التوالي.

صورة

إذا كنا نريد نقل بيانات أقل من 679 أو 1021 بايت ، ولكن أكثر من 367 أو 552 بايت ، فإن النقل سيستغرق 5 فتحات ، وسيتم إرسال البيانات في نفس الوقت ، مما يقلل من كفاءة الإرسال.

صورة

تقوم SBC في الوضع ثنائي القناة ، على صوت 44100 هرتز مع معلمات Bitpool 38 ، و 16 كتلة لكل إطار ، و 8 نطاقات تردد ، بترميز الصوت إلى إطارات بحجم 164 بايت ، مع معدل بت 452 كيلوبت في الثانية.
يجب تغليف الصوت في بروتوكولي النقل L2CAP و AVDTP ، اللذين يأخذان 16 بايت من حمولة الصوت.

\ تبدأ {align *} طول الإطار & = 4 + \ frac {subbands \ times channels} {2} + \\ & \ start {cases} \ frac {blocks \ times channel \ times bitpool} {8} & \ text { إذا كان الوضع أحادي أو ثنائي القناة} \\ \ frac {subbands + blocks \ times bitpool} {8} & \ text {if stereo stereo} \\ \ frac {blocks \ times bitpool} {8} & \ text {if stereo mode} \\ \ end {cases} \ end {align *}





وبالتالي ، في نقل Bluetooth مع 5 فتحات ، يمكن استيعاب 4 إطارات صوتية:
679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 ( SBC) - (164*4) = 6 

نضع 11.7 مللي ثانية من بيانات الصوت في حزمة الإرسال ، والتي سيتم إرسالها في 3.75 مللي ثانية ، ولدينا 6 بايت غير مستخدم في الحزمة.
إذا قمت برفع bitpool قليلاً ، فلن يمكن بعد الآن تثبيت 4 إطارات صوتية في حزمة واحدة. سيتعين عليك إرسال 3 إطارات في وقت واحد ، مما يقلل من كفاءة الإرسال ، ويقلل من كمية الصوت المرسل لكل حزمة ، وسيؤدي سريعًا إلى التأتأة في ظروف الراديو السيئة.

بنفس الطريقة ، تم اختيار معدل بت قدره 551 kbit / s للحصول على معدل بيانات إلكتروني قدره 3 ميجابت في الثانية: مع Bitpool 47 و 16 فدرة في إطار و 8 نطاقات تردد ، يكون حجم الإطار 200 بايت ، ومعدل بت 551 kbit / s. 5 إطارات أو 14.6 مللي ثانية من الموسيقى تناسبها في حزمة واحدة.

خوارزمية حساب جميع معلمات SBC معقدة للغاية ، يمكنك بسهولة الخلط إذا عدت يدويًا ، لذلك قمت بعمل حاسبة تفاعلية لمساعدة المهتمين: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

لماذا كل هذا ضروري؟

على عكس الاعتقاد الشائع بجودة الصوت في برنامج الترميز aptX ، فقد ينتج عنه نتائج أسوأ على بعض الملفات من SBC بمعدل بت قياسي يبلغ 328 كيلوبت في الثانية.

تخصص SBC بشكل حيوي بتات الكمي لنطاقات التردد ، والتي تعمل على أساس "من الأسفل إلى الأعلى". إذا تم استخدام معدل البت بأكمله للترددات المنخفضة والمتوسطة ، فسيتم "قطع" الترددات الأعلى (سيكون هناك صمت بدلاً من ذلك).
يحدد aptX نطاقات التردد التي لها نفس عدد البتات باستمرار ، ولهذا السبب يوجد معدل بتات ثابت: 352 kbit / s لـ 44.1 kHz و 384 kbit / s لـ 48 kHz ، ولا يمكنه "نقل البتات" إلى تلك الترددات في أشد الحاجة إليها. على عكس SBC ، لن "aptX" تقطع "الترددات" ، لكنها ستضيف ضوضاء تكميمية لهم ، وتقلل من النطاق الديناميكي للصوت ، وفي بعض الأحيان تقدم تشققات مميزة. SBC ، من ناحية أخرى ، "يأكل التفاصيل" - يتجاهل أكثر المناطق هدوءًا.
مقارنة بـ SBC 328k ، في المتوسط ​​، يقدم aptX تشويها أقل للموسيقى بنطاق تردد عريض ، ولكنه يفوز في بعض الأحيان على الموسيقى بنطاق تردد ضيق ونطاق ديناميكي واسع.

النظر في حالة خاصة. Spectrogram لتسجيل البيانو:
صورة

تكمن الطاقة الرئيسية في الترددات من 0 إلى 4 كيلو هرتز ، وتستمر حتى 10 كيلو هرتز.
الطيفية للملف المضغوط في aptX هي كما يلي:
صورة

وهكذا يبدو SBC 328k.
صورة

يمكن ملاحظة أن SBC 328k قد أوقف بشكل دوري النطاق الذي يتجاوز 16 كيلو هرتز بشكل دوري ، واستهلك كل معدل البت المتاح للنطاقات التي تقل عن هذه القيمة. ومع ذلك ، أدخلت aptX المزيد من التشويه في طيف التردد الذي تسمعه الأذن البشرية ، والذي يمكن رؤيته على الطيفية الأصلية المخصومة من الطيفية aptX (الطيف الأكثر إشراقًا):
صورة

بينما SBC 328k أقل عابث الإشارة في النطاق من 0 إلى 10 كيلو هرتز ، وقطع الباقي -
صورة

كان معدل البت SBC 485k كافيًا لتوفير نطاق التردد بأكمله ، دون فصل النطاقات.
صورة

SBC 485k على هذا التكوين يتقدم بشكل كبير عن aptX في المدى من 0 إلى 15 كيلو هرتز ، وبفارق أصغر ولكنه لا يزال ملحوظًا - 15-22 كيلو هرتز (الأغمق ، والتشويه الأقل):
صورة

أرشيف الصوت الأصلي ، SBC و aptX .

بالانتقال إلى SBC عالي المستوى ، ستحصل على صوت ، غالبًا ما يكون متفوقًا على aptX ، على أي سماعات رأس. في سماعات الرأس التي تدعم اتصال EDR بسرعة 3 ميجابت في الثانية ، ينتج معدل البت 551 كيلوبت في الثانية صوتًا مشابهًا لـ aptX HD.

هل أستطيع الحصول على المزيد؟

يحتوي التصحيح لنظام Android أيضًا على خيار زيادة معدل البت لأجهزة EDR التي تبلغ 2 ميجابت في الثانية. يمكنك زيادة معدل البت من 452 كيلو بت في الثانية إلى 595 كيلو بت في الثانية ، بتكلفة تقليل استقرار الإرسال في ظروف الراديو المعقدة.
فقط قم بتعيين المتغير pers.bluetooth.sbc_hd_higher_bitrate إلى 1:
 # setprop persist.bluetooth.sbc_hd_higher_bitrate 1 

حتى الآن تم قبول تصحيح البتات الشديد في LineageOS 15.1 ، ولكن ليس في 16.0.

توافق الجهاز

يدعم SBC Dual Channel جميع سماعات الرأس ومكبرات الصوت ووحدات رأس السيارة تقريبًا. هذا ليس مفاجئًا - يصف المعيار دعمه في أي أجهزة فك تشفير. يوجد عدد صغير من الأجهزة التي تسبب هذا الوضع في حدوث مشكلات ، ولكن هذه مثيلات مفردة.
يمكن العثور على مزيد من التفاصيل حول الأجهزة المتوافقة على w3bsit3-dns.com أو مطوري xda .

مقارنة اختلافات الصوت

قمت بإنشاء خدمة ويب ترميز الصوت في SBC (وكذلك aptX و aptX HD) في الوقت الحقيقي ، مباشرة في المستعرض. مع ذلك ، يمكنك مقارنة صوت العديد من ملفات تعريف SBC وبرامج الترميز الأخرى ، دون نقل الصوت فعليًا عبر Bluetooth ، على أي سماعات رأس ومكبرات صوت وموسيقى مفضلة لديك ، بالإضافة إلى تغيير إعدادات الترميز مباشرةً أثناء تشغيل الصوت.
btcodecs.valdikss.org.ru/sbc-encoder

اتصل بمطوري Android

كتبت إلى العديد من مطوري مكدس Google Bluetooth مع طلب للنظر في تضمين تصحيحات في فرع Android الرئيسي - AOSP ، لكنني لم أتلق إجابة واحدة. تم ترك تصحيحاتي في نظام تصحيح Gerrit لنظام Android أيضًا دون تعليق من قِبل أي شخص مشارك.
سأكون مسرورًا إذا تمت مساعدتي فيما يتعلق بالمطورين من Google وتنفيذ SBC HD في Android. تصحيح gerrit قديم بالفعل (هذا أحد المراجعات المبكرة) ، وسأقوم بتحديثه إذا كان المطورون مهتمون بالتغييرات التي أجريتها (ليس من السهل بالنسبة لي تحديثها ، ليس لدي أجهزة متوافقة مع نظام Android Q).

استنتاج

يمكن لمستخدمي الهواتف الذكية مع LineageOS و Resurrection Remix والبرامج الثابتة crDroid أن يكونوا محتوى بجودة صوت محسنة الآن ، فقط قم بتنشيط الخيار في إعدادات جهاز Bluetooth. يمكن لمستخدمي Linux أيضًا الحصول على معدل بت SBC أكبر من خلال تثبيت تصحيح من Pali Rohár ، والذي يضيف ، من بين أشياء أخرى ، دعمًا لبرامج الترميز aptX و aptX HD و FastStream.

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


All Articles