الحد الأقصى لنوع الجهاز

في تطبيق الصوت على 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) في AudioContainers.h للتحقّق مما إذا كانت جميع أنواع الأجهزة السماعية المحدّدة تكون من نفس النوع.

التنفيذ

على المصنّعين الأصليين للأجهزة إزالة تمثيل حقل البت لنوع الجهاز الصوتي من تنفيذ HAL للصوت.

  1. إزالة جميع مساحات التخزين للأجهزة في حقل بت.

    يجب عدم استخدام audio_devices_t لتمثيل أجهزة سماعية متعددة. الأنواع. بدلاً من ذلك، استخدم قائمة أو متجه.

  2. إيقاف استخدام عمليات البت لمقارنات أنواع الأجهزة.

    قبل الإصدار 11 من نظام Android، يمكن استخدام أنواع الأجهزة السماعية Bitfield. وفي هذه الحالة، من الشائع استخدام عمليات البت لأنواع الأجهزة والمقارنات. عند إضافة أنواع أجهزة صوتية جديدة مع تعداد، قد تؤدي عمليات البت إلى نتائج غير متوقعة. يمكنك بدلاً من ذلك استخدام الدوال المساعدة كبديل. إذا كان هناك واحدة ثم استخدام المقارنة المباشرة لمقارنة القيمتين. للتحقق من وجود صوت نوع الجهاز من فئة محددة، استخدِم الدوال المساعدة في /system/media/audio/include/system/audio.h على سبيل المثال: audio_is_output_device(audio_devices_t device)

  3. توقف عن استخدام القيم المحددة مسبقًا لمجموعات من أنواع الأجهزة السماعية.

    هناك بعض القيم المحددة مسبقًا لمجموعات من أنواع الأجهزة السماعية، AUDIO_DEVICE_OUT_ALL، في system/media/audio/include/system/audio-base-utils.h كل هذه القيم محجوزة ولكن قد يتم إيقافها لأنها لن تكون صحيحة عند تعداد جديد إضافة أنواع الأجهزة السماعية. تتوفّر مجموعات جديدة من أنواع الأجهزة السماعية المحدّدة في audio-base-utils.h، وهي مصفوفة لأنواع الأجهزة السماعية، مثل AUDIO_DEVICE_OUT_ALL_ARRAY

  4. تنفيذ 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 للصوت الخاص بالحبَّار.

التخصيص

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

تسمح جميع أنواع الأجهزة الصوتية المضافة تمثيل نوع جهاز بمجموعة بت واحدة، لكي تظل عمليات تنفيذ HAL الحالية تعمل.

إذا تمت إضافة أنواع أجهزة صوتية جديدة ورغب المصنّعون الأصليون لها في استخدامها، ترقية تطبيق HAL الصوتي إلى الإصدار 6.0 أو إصدار أحدث من HIDL. من المهم ترقية إصدار HAL الرئيسي إلى الإصدار 3.0 وتنفيذ create_audio_patch وrelease_audio_patch، لأن إنّ استخدام set_parameters لتوجيه البث قد يؤدي إلى نتائج غير متوقّعة عندما إضافة أنواع جديدة من الأجهزة السماعية.

التحقُّق

إن العمل المطلوب من المصنّعين الأصليين للأجهزة هو تحديث عمليات تنفيذ HAL. VTS لـ يمكن استخدام طبقة تجريد الأجهزة (HAL) الصوتية للتحقق من صحة التنفيذ على النحو المنشود. الكل يمكن العثور على الاختبارات في ملفات VTS: