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