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