في محتوى الصوت على Android، يُستخدَم الرمز audio_devices_t
لتمثيل نوع الجهاز الصوتي. ويُستخدم على نطاق واسع في رمز مصدر الصوت كحقل بت لفلترة أو اختيار جهاز واحد أو أكثر من الأجهزة المحدّدة. قبل نظام التشغيل Android 11، كان الحد الأقصى المسموح به هو 30 نوعًا
لأجهزة إدخال/إخراج الصوت، ولم تكن هناك خانات فارغة لإضافة أنواع جديدة من أجهزة الصوت. لقد
أزلنا الحدّ الأقصى لعدد أنواع الأجهزة الصوتية للسماح
بإضافة أنواع جديدة من الأجهزة الصوتية.
لإزالة الحد المفروض على عدد أنواع الأجهزة السماعية، أصبحت أنواع الأجهزة الصوتية الآن قيمًا معدَّة بدلاً من أقنعة البت.
ويتم الاحتفاظ بجميع أنواع الأجهزة الصوتية الحالية كما هي، ولا يزال يتم استخدام AUDIO_DEVICE_BIT_IN
لتمييز أجهزة الإدخال والإخراج. عند إضافة أنواع أجهزة صوت جديدة، يتم إدراج قيمها في الفجوات بين القيم الحالية.
على المصنّعين الأصليين للأجهزة عدم استخدام audio_devices_t
كقناع بت، لأنّ ذلك قد يؤدي إلى نتائج غير متوقّعة عند إضافة أنواع جديدة من الأجهزة الصوتية.
الأمثلة والمصدر
قبل الإصدار 11 من Android، كان هناك نوعان شائعان من استخدام أنواع أجهزة الصوت كأقنعة بت.
- استخدام القيمة
audio_devices_t
لتمثيل أجهزة صوت متعددة - التحقّق مما إذا كانت قيمة
audio_devices_t
تحتوي على أنواع أجهزة صوت من فئة محدّدة
لتمثيل أنواع متعددة من أجهزة الصوت، يتم استخدام فئة باسم DeviceTypeSet
في
/libaudiofoundation/include/media/AudioContainers.h
، وهي حاوية std::set
من audio_devices_t
. يتم تعريف الفئة في مكتبة
libaudiofoundation
المتاحة من قِبل المورّد. لتمثيل
أنواع أجهزة
صوتية متعددة في رمز C، يمكن استخدام صفيف أو قائمة audio_devices_t
.
للتحقّق مما إذا كان نوع جهاز واحد ينتمي إلى فئة محدّدة، استخدِم الدوالّ المساعِدة
audio_is_.*_device
في
/system/media/audio/include/system/audio.h
.
مع العديد من أنواع الأجهزة الصوتية، استخدِم وظائف المساعد في libaudiofoundation
. على سبيل المثال، استخدِم areAllOfSameDeviceType (DeviceTypeSet, std::function
في
AudioContainers.h
للتحقّق مما إذا كانت جميع أنواع أجهزة الصوت المُدرَجة من النوع نفسه.
التنفيذ
على المصنّعين الأصليّين للأجهزة إزالة تمثيل حقل البتات لنوع جهاز الصوت من تنفيذ HAL للصوت.
- إزالة جميع مساحة التخزين للأجهزة في حقل بت
يجب عدم استخدام السمة
audio_devices_t
لتمثيل أنواع الأجهزة الصوتية المتعددة. بدلاً من ذلك، استخدم قائمة أو متجه. - توقَّف عن استخدام عمليات البتات في مقارنات أنواع الأجهزة.
قبل الإصدار 11 من Android، يمكن استخدام أنواع أجهزة الصوت كجدول ملف شخصي. في هذه الحالة، من الشائع استخدام عمليات البتات لمقارنات أنواع الأجهزة. عند إضافة أنواع جديدة من أجهزة الصوت المُدرَجة، قد تؤدي عمليات البت إلى نتائج غير متوقّعة. يمكنك بدلاً من ذلك استخدام الدوال المساعدة كبديل. إذا كان هناك نوع واحد لأجهزة الصوت، استخدِم المقارنة المباشرة لمقارنة القيمتَين. للتحقّق مما إذا كان نوع جهاز الصوت ينتمي إلى فئة محدّدة، استخدِم الدوالّ المساعِدة في
/system/media/audio/include/system/audio.h
. على سبيل المثال،audio_is_output_device(audio_devices_t device)
. - توقّف عن استخدام القيم المحدّدة مسبقًا لمجموعات أنواع أجهزة الصوت.
هناك بعض القيم المحدّدة مسبقًا لمجموعات أنواع أجهزة الصوت،
AUDIO_DEVICE_OUT_ALL
، فيsystem/media/audio/include/system/audio-base-utils.h
. كل هذه القيم محجوزة، ولكن قد يتم إيقافها نهائيًا لأنّها لن تكون صحيحة عند إضافة أنواع جديدة من أجهزة الصوت المُدرَجة. هناك مجموعات جديدة من أنواع الأجهزة الصوتية محدّدة فيaudio-base-utils.h
، وهي صفائف من أنواع الأجهزة الصوتية، مثلAUDIO_DEVICE_OUT_ALL_ARRAY
. - نفِّذ الطريقتين
create_audio_patch()
وrelease_audio_patch()
للتوجيه بدلاً منset_parameters
.تستخدم الطريقة
set_parameters
أنواع الأجهزة الصوتية كحقل بت، لذا قد تظهر نتائج غير متوقّعة في حال إضافة أنواع جديدة من الأجهزة الصوتية.هناك نوعان من تصحيحات الصوت مطلوبان حاليًا:
- مزج مع رموز تصحيح الجهاز، للتشغيل
- جهاز لمزج التصحيحات للتسجيل
في التحديثات اللاحقة، قد تكون هناك حاجة إلى تصحيحات إضافية للاتصال بين الأجهزة.
عند إنشاء تصحيح صوتي، إذا لم يتم تحديد اسم معرِّف التصحيح، يجب أن ينشئ HAL الصوتي اسمًا معرِّفًا فريدًا للتصحيح يمكنه تحديده. بخلاف ذلك، يجب أن يستخدم HAL للصوت معرّف تصحيح الصوت المحدَّد لتعديل تصحيح الصوت.
في حال استخدام HAL صوتي قديم وبرنامج تضمين AOSP HIDL، يجب أن يضبط HAL الصوت القديم إصدار HAL الرئيسي على 3.0.
لتفعيل ميزة تصحيح الصوت، يجب ضبط واجهة HAL للصوت على الإصدار الرئيسي لواجهة HAL على 3.0 أو إصدار أحدث. يمكنك الرجوع إلى
Device::supportsAudioPatches()
في تنفيذ HIDL التلقائي لمزيد من المعلومات، والتي يمكن العثور عليها أيضًا في HAL الصوتي لنظام التشغيل Cuttlefish.
التخصيص
لا يمكن إيقاف الميزة أو التراجع عن إعادة صياغة جهاز الصوت في الإطار الذي يتيح إضافة أنواع أجهزة الصوت.
تسمح جميع أنواع أجهزة الصوت المُضافة بتمثيل نوع جهاز باستخدام مجموعة بت واحدة، وبالتالي، ستظل عمليات تنفيذ HAL الحالية صالحة.
في حال إضافة أنواع جديدة من أجهزة الصوت وأرادت الشركات المصنّعة للأجهزة الأصلية استخدامها، عليهم
ترقية تنفيذ HAL للصوت والانتقال إلى الإصدار 6.0 من HIDL أو إصدار أحدث. من الواجب
ترقية الإصدار الرئيسي من HAL إلى 3.0 وتنفيذ الطريقتَين
create_audio_patch
وrelease_audio_patch
، لأنّ استخدام set_parameters
لتوجيه البث يمكن أن يؤدي إلى نتائج غير متوقّعة عند
إضافة أنواع جديدة من أجهزة الصوت.
التحقُّق
إن العمل المطلوب من المصنّعين الأصليين للأجهزة هو تحديث عمليات تنفيذ HAL. يمكن استخدام أداة التحقّق من الفيديو لوحدة HAL لمعالجة الصوت للتحقّق مما إذا كان التنفيذ يعمل على النحو المطلوب. يمكن العثور على كل الاختبارات في ملفات VTS.