تعديل مكدس Bluetooth لتحسين الصوت على سماعات الرأس بدون برامج ترميز AAC و aptX و LDAC

قبل قراءة هذا المقال ، يوصى بقراءة المقال السابق: الصوت عبر البلوتوث: أكبر قدر ممكن من التفاصيل حول الملفات الشخصية وبرامج الترميز والأجهزة

أبلغ بعض مستخدمي سماعات الرأس اللاسلكية عن جودة صوت رديئة ونقص في الترددات العالية عند استخدام برنامج ترميز Bluetooth SBC القياسي ، والذي تدعمه جميع أجهزة الصوت. من التوصيات الشائعة لتحسين الصوت شراء الأجهزة وسماعات الرأس التي تدعم برامج ترميز aptX و LDAC. تتطلب برامج الترميز هذه الإتاوات ، لذا فإن الأجهزة التي تدعمها تكون أكثر تكلفة.

اتضح أن الجودة المنخفضة لـ SBC ترجع إلى القيود الاصطناعية لمكدسات Bluetooth وإعدادات سماعات الرأس ، ويمكن التحايل على هذا القيد على أي أجهزة موجودة عن طريق تغييرات البرامج في الهاتف الذكي أو الكمبيوتر.

برنامج ترميز SBC

يحتوي برنامج ترميز SBC على العديد من المعلمات المختلفة التي يتم التفاوض عليها أثناء مرحلة إعداد الاتصال. فيما بينها:

  • عدد القنوات ونوعها: ستيريو مشترك ، ستيريو ، قناة مزدوجة ، أحادي ؛
  • عدد نطاقات التردد: 4 أو 8 ؛
  • عدد الكتل في العبوة: 4 ، 8 ، 12 ، 16 ؛
  • خوارزمية تخصيص بتات التكميم: الجهارة ، نسبة الإشارة إلى الضوضاء (SNR) ؛
  • القيمة القصوى والدنيا لمجموعة البتات المستخدمة في التكميم (bitpool): عادةً من 2 إلى 53.

يجب أن تدعم وحدة فك التشفير أي مجموعة من هذه الخيارات. قد لا ينفذ المشفر كل شيء.
تتوافق حزم Bluetooth الحالية عادةً على ملف التعريف التالي: استريو مشترك ، 8 نطاقات ، 16 كتلة ، Loudness ، bitpool 2..53. يشفر ملف التعريف هذا صوت 44.1 كيلوهرتز بمعدل بت 328 كيلوبت في الثانية.
تؤثر معلمة bitpool بشكل مباشر على معدل البت داخل ملف تعريف واحد: فكلما ارتفع ، زاد معدل البت ، وبالتالي الجودة.
ومع ذلك ، لا يرتبط إعداد bitpool بملف تعريف معين ؛ تؤثر المعلمات الأخرى أيضًا بشكل كبير على معدل البت: نوع القنوات وعدد نطاقات التردد وعدد الكتل. يمكنك رفع معدل البت بشكل غير مباشر ، من خلال التفاوض على ملفات التعريف غير القياسية ، دون تغيير مجموعة البت.

تعديل مكدس Bluetooth لتحسين الصوت على سماعات الرأس بدون برامج ترميز AAC و aptX و LDAC

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

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

تنشأ قيم 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 ، والتي تؤثر بشكل مباشر على الحد الأقصى لمعدل البت. لكن هذه ليست المشكلة الأكبر ، فجميع سماعات الرأس تقريبًا تحدد أيضًا قيمة bitpool القصوى إلى 53.
كما رأيت بالفعل ، تعمل معظم الأجهزة بشكل جيد على مكدس Bluetooth معدل بمعدل بت يبلغ 551 كيلوبت في الثانية ، دون انقطاع وكود. لكن معدل البت هذا لن يتم التفاوض عليه أبدًا في ظل الظروف العادية ، على مكدسات Bluetooth العادية.

تعديل مكدس البلوتوث

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

دعنا نضيف مفتاح تبديل إلى الواجهة! لقد قمت بعمل تصحيحات لنظامي Android 8.1 و Android 9 التي تضيف دعمًا مزدوجًا للقناة بالكامل إلى الحزمة ، وتضيف وضعًا إلى قائمة تبديل الوضع في أدوات المطور ، وتعامل SBCs التي تم تمكين القناة المزدوجة كما لو كانت ترميزًا إضافيًا مثل aptX ، AAC أو LDAC (يطلق عليه Android صوت HD) عن طريق إضافة علامة اختيار إلى إعدادات Bluetooth الخاصة بالجهاز. إليك ما يبدو عليه الأمر:

تعديل مكدس Bluetooth لتحسين الصوت على سماعات الرأس بدون برامج ترميز AAC و aptX و LDAC

التصحيح لنظام Android 9
التصحيح لنظام Android 8.1

عند تنشيط خانة الاختيار ، يبدأ إرسال صوت Bluetooth بمعدل بت 551 كيلو بايت في الثانية، إذا كانت سماعات الرأس تدعم اتصالاً بسرعة 3 ميجابت في الثانية ، أو 452 كيلو بايت في الثانيةإذا كانت سماعات الرأس تدعم فقط 2 ميجابت في الثانية.

تم تضمين هذا التصحيح في البرامج الثابتة البديلة التالية:

  • LineageOS
  • قيامة ريميكس
  • كردرويد

من أين أتت 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 في وضع القناة المزدوجة ، بصوت 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 بايتات غير مستخدمة متبقية في الحزمة.
إذا قمت برفع مجموعة bitpool بشكل طفيف ، فلن يعد بالإمكان تجميع 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

كان معدل البت 485k SBC كافياً لحفظ نطاق التردد بأكمله ، دون قطع النطاقات.
تعديل مكدس Bluetooth لتحسين الصوت على سماعات الرأس بدون برامج ترميز AAC و aptX و LDAC

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

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

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

وربما أكثر من ذلك؟

يحتوي تصحيح Android أيضًا على خيار لزيادة معدل البت لأجهزة EDR بسرعة 2 ميجابت في الثانية. من الممكن زيادة معدل البت من 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) في الوقت الفعلي ، في المتصفح مباشرة. باستخدامه ، يمكنك مقارنة صوت ملفات تعريف SBC المختلفة وبرامج الترميز الأخرى ، دون نقل الصوت فعليًا عبر Bluetooth ، على أي سماعات رأس سلكية ، ومكبرات صوت ، والموسيقى المفضلة لديك ، بالإضافة إلى تغيير معلمات التشفير مباشرةً أثناء تشغيل الصوت.
btcodecs.valdikss.org.ru/sbc-encoder

اتصل بمطوري Android

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

اختتام

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

المصدر: www.habr.com

إضافة تعليق