في صوت Android، يتم استخدام audio_devices_t لتمثيل نوع الجهاز الصوتي. ويُستخدَم على نطاق واسع في رمز مصدر الصوت كحقل بتات لفلترة جهاز واحد أو أكثر من الأجهزة المحدّدة أو اختيارها. قبل الإصدار 11 من نظام التشغيل Android، كان هناك حد أقصى يبلغ 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لتمثيل أنواع متعددة من أجهزة الصوت. بدلاً من ذلك، استخدِم قائمة أو متّجهًا. - التوقّف عن استخدام عمليات البت لمقارنة أنواع الأجهزة
قبل الإصدار Android 11، يمكن استخدام أنواع أجهزة الصوت كحقل بت. في هذه الحالة، من الشائع استخدام عمليات البت للمقارنة بين أنواع الأجهزة. عند إضافة أنواع جديدة من أجهزة الصوت التي تم تعدادها، قد تؤدي عمليات البت إلى نتائج غير متوقّعة. يمكنك استخدام دوال مساعدة كبديل. إذا كان هناك نوع واحد من أجهزة الصوت، استخدِم المقارنة المباشرة لمقارنة القيمتين. للتحقّق مما إذا كان نوع جهاز صوتي ينتمي إلى فئة محدّدة، استخدِم دوال المساعدة في
/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) وبرنامج تضمين HIDL في مشروع Android مفتوح المصدر (AOSP)، يجب أن تضبط طبقة تجريد أجهزة الصوت القديمة إصدار HAL الرئيسي على 3.0.
لتفعيل ميزة "تصحيح الصوت"، يجب أن يضبط طبقة تجريد الأجهزة (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. يمكن استخدام VTS لطبقة تجريد الأجهزة الصوتية (HAL) للتحقّق من أنّ عملية التنفيذ تعمل على النحو المنشود. يمكن العثور على جميع الاختبارات في ملفات VTS.