صوت HAL

الروبوت الأجهزة السمعية تجريد طبقة (HAL) يربط على مستوى أعلى، واجهات برمجة التطبيقات إطار السمعية ومحددة في android.media إلى الكامنة برامج تشغيل الصوت والأجهزة. يحدد Audio HAL الواجهة القياسية التي تستدعيها خدمات الصوت. يجب أن يتم تنفيذه حتى تعمل أجهزة الصوت بشكل صحيح.

تقدم هذه الصفحة نظرة عامة على HAL الصوتي وتوفر تفاصيل عن واجهة برمجة التطبيقات ومتطلبات التنفيذ.

واجهة الصوت HAL

يتم تعريف واجهة HAL الصوت باستخدام HIDL في .hal الملفات و XSD المخططات لملفات التكوين، كما هو موضح على النحو التالي:

audio_hal

الشكل 1: واجهة الصوت HAL

ملفات التكوين

تعتبر ملفات تكوين XML الخاصة بالسياسة الصوتية والتأثيرات الصوتية جزءًا من واجهة Audio HAL. يجب أن تتوافق هذه الملفات مع مخططاتها ، ويتم التحقق من المطابقة عن طريق اختبارات VTS.

وكجزء من تنفيذ HAL الصوت، يجب عليك إنشاء ملف تكوين نهج الصوت التي تصف طوبولوجيا الصوت. يجب أن يعلن القدرات السمعية HAL في audio_policy_configuration.xml ملف للإطار استخدامها.

واجهة برمجة تطبيقات Audio HAL

يحتوي الصوت HAL على واجهات برمجة التطبيقات التالية:

  • Core HAL
  • تأثيرات HAL
  • HAL المشترك

يتم وصف كل من واجهات برمجة التطبيقات هذه في الأقسام التالية.

Core HAL

Core HAL هي واجهة برمجة التطبيقات الرئيسية المستخدمة بواسطة AudioFlinger لتشغيل الصوت والتحكم في توجيه الصوت. بعض الواجهات الرئيسية هي كما يلي:

  • IDeviceFactory.hal هي نقطة الدخول إلى API.
  • IDevice.hal و IPrimaryDevice.hal تتضمن أساليب مثل setMasterVolume أو openInputStream .
  • تيارات هي أحادي الاتجاه وتستخدم من قبل AudioFlinger لإرسال أو استقبال الصوت من وإلى HAL من خلال IStream.hal ، IStreamOut.hal و IStreamIn.hal .

يسرد الجدول التالي موقع مكونات Core HAL المفيدة:

مكون HAL الأساسي موقع
أحدث نسخة من API /hardware/interfaces/audio/6.0
أنواع خاصة بأحدث Core HAL API /hardware/interfaces/audio/6.0/types.hal
ملف تكوين نهج الصوت مخطط XSD /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd

تطبيق الافتراضي للAPI الأساسية HAL ( /hardware/interfaces/audio/core/all-versions/default/ ) هو التفاف حول تنفيذ ما قبل التريبل HAL باستخدام مكتبات إرث مشترك . يمكن أيضًا اعتبار التطبيق الافتراضي كمرجع عند تنفيذ إصدارات جديدة من HALs الصوتية التي تتفاعل مع برامج تشغيل kernel مباشرةً.

تأثيرات HAL

يتم استخدام Effects HAL API بواسطة إطار عمل التأثيرات للتحكم في التأثيرات الصوتية. يمكنك أيضا تكوين ما قبل معالجة آثار مثل السيطرة التلقائية و الضجيج من خلال API تأثيرات HAL.

يسرد الجدول التالي موقع مكونات HAL للتأثيرات المفيدة:

مكون HAL التأثيرات موقع
أحدث نسخة من API /hardware/interfaces/audio/effect/6.0/
تأثير مخطط XSD لملف التكوين /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd

لمزيد من المعلومات، راجع تنفيذ عينة من تأثيرات API ( /hardware/interfaces/audio/effect/all-versions/default/ ) و تأثيرات الصوت قسم.

HAL المشترك

HAL المشترك عبارة عن مكتبة من أنواع البيانات الشائعة المستخدمة بواسطة واجهات برمجة تطبيقات HAL الأساسية والتأثيرات. لا يحتوي على واجهات ولا اختبارات VTS مرتبطة به لأنه يحدد هياكل البيانات فقط. تحتوي واجهة برمجة تطبيقات HAL المشتركة على ما يلي:

  • التعاريف ( /hardware/interfaces/audio/common/6.0/types.hal ) مشتركة من قبل الأساسية وتأثير واجهات برمجة التطبيقات.
  • المرافق ( /hardware/interfaces/audio/common/all-versions ) تستخدم لمساعدة الترميز ضد HIDL واجهات برمجة التطبيقات للتطبيقات والعملاء والاختبارات.

متطلبات

بالإضافة إلى تنفيذ HAL الصوتي وإنشاء ملف تكوين سياسة الصوت ، يجب الالتزام بمتطلبات HAL التالية:

  • إذا كان الالتقاط من أجل Sound Trigger (الالتقاط من المخزن المؤقت للكلمة الساخنة DSP) مدعومًا بملف تعريف إدخال واحد ، فيجب أن يدعم التنفيذ عدد التدفقات النشطة في ملف التعريف هذا المطابق لعدد الجلسات المتزامنة التي يدعمها Sound Trigger HAL.
  • التزامن من المكالمات الصوتية TX والقبض على من معالج التطبيقات كما هو مفصل على التقاط المتزامنة الصفحة.

تحديثات الصوت HAL V7

من أجل معالجة مشكلات التوافق مع الإصدارات السابقة ، يعد Stable AIDL إلزاميًا لجميع تغييرات HAL التي تبدأ من Android T. لدعم وتعزيز اعتماد AIDL في Android T والإصدارات الأحدث ، يقوم Audio HAL V7 بما يلي:

  • يوحد نماذج البيانات المستخدمة بواسطة إطار العمل و HAL.
  • يقلل من الازدواجية بين أنواع بيانات HIDL (تعدادات) ومخطط XML المستخدم لتكوين سياسة الصوت.

على وجه التحديد ، يتم إجراء التغييرات في المجالات التالية في الصوت HAL V7:

تمت مناقشة هذه التغييرات بمزيد من التفصيل في الأقسام الخاصة بكل منها.

التعداد

بدءًا من Audio HAL V7 ، يتم تحديد الأنواع المعددة المستخدمة في ملف تكوين نهج الصوت فقط في مخطط XSD وليس في HIDL.

في الصوت HAL V6، قيم enum أنواع (مثل AudioFormat ) في types.hal وتعرف أيضا في تكوين الصوت سياسة ملف XSD المخطط، وخلق الازدواجية. لتجنب هذا في V7، و enum يتم تغيير أنواع ل string ويتم سرد كافة قيم التعداد الممكنة في مخطط XSD بدلا من ذلك.

انظر الشكل 1 للمقارنة لبعض التغييرات على AudioFormat enum نوع في V7:

audioformat-change

الشكل 1: مقارنة لبعض التغييرات على AudioFormat enum

الرجوع إلى القائمة التالية ل enum الأنواع التي تم تحويلها إلى String :

  • AudioChannelMask
  • AudioContentType
  • AudioDevice : البائعين الموسعة
  • AudioFormat : البائعين الموسعة
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

تمرير String القيم التعداد

تُستخدم قيم السلسلة لنقل المعلومات كقيم تعداد عبر حدود واجهة HAL. كل من الإطار وHAL المجمع القيم التعداد استخدام صحيح لتنفيذ منطق الأعمال وتوظيف نهج تحويل مبين في الشكل 2 .

audio-passing-values

الشكل 2: تمرير string enum القيم

كمثال ، لتمرير قيمة نوع تنسيق الصوت من الإطار إلى البائع:

  1. و enum قيمة AudioFormat وتحويلها إلى string القيمة في libaudiohal ويتم تمريرها إلى HAL.
  2. على الجانب HAL، و default wrapper تحويل string إلى enum القيمة التي يتم تمريرها إلى HAL القديمة.

تغييرات مخطط XML

يسمح وجود قوائم كاملة بقيم التعداد في مخطط XML (XSD) بالتحقق من صحة ملف XML لتكوين سياسة الصوت بشكل أفضل بواسطة VTS. يتم إجراء التغييرات في ملف تكوين نهج الصوت المستخدم مع HAL V7 للتوافق مع XSD.

في V7، معيار يستخدم حرف (الفضاء) لقوائم قيمة ترسيم في الصفات (مثل أخذ عينات اسعار، أقنعة قناة والأعلام)، بدلا من , (فاصلة) و | (شريط عمودي) الرموز المستخدمة في V6 وما دونه. كما رأينا في المثال التالي، يتم استخدام الفضاء لتحديد قائمة القيم ل channelMasks :

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

لإجراء التغييرات رمز، استخدم برنامج نصي التحويل التلقائي دعا update_audio_policy_config.sh . راجع الأمر التالي لتحويل ملف تهيئة سياسة الصوت V6 إلى إصدار V7 لجهاز Pixel 5 ("Redfin"):

hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0

أنواع البيانات

تم إعادة تعريف بعض هياكل البيانات في V7 لتقليل التعريفات المكررة. يتم تجميع المجموعات المتكررة لعناصر البيانات معًا في هياكل قابلة لإعادة الاستخدام. تستخدم هياكل البيانات هذه أحدث ميزات HIDL مثل النقابات الآمنة.

على سبيل المثال، في V6 وأدناه، وثلاثة أضعاف من <format, sampling rate, channel mask> يستخدم غالبا في واجهات HIDL وأنواعها. لإزالة هذا التكرار، في V7، و AudioConfigBase يتم تحديد نوع البيانات وأنواع البيانات الأخرى على النحو التالي:

  • AudioConfigBase := <format, sampling rate, channel mask>

  • AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>

    المستخدمة من قبل AudioConfig ، AudioOffloadInfo ، AudioPortConfig

  • AudioProfile := <format, {sampling rates}, {channel masks}>

    يستبدل مجموعات فضفاضة في AudioPort/PortConfig

  • AudioPortExtendedInfo := device | mix | session

    يستبدل النقابات في AudioPort/PortConfig

علامات البائع

بالإضافة إلى أنواع الأجهزة وتنسيقاتها ، يمكن للبائعين إضافة علامات مخصصة للبيانات الوصفية لمسار الصوت.

لتشغيل البيانات الوصفية للمسار وتسجيلها ، يمكن للبائعين تمرير علاماتهم الخاصة ، والتي تُستخدم لإضافة سمات إلى تدفقات الإدخال / الإخراج الصوتية ، من التطبيقات إلى HAL.

تتم إضافة علامات البائع للبيانات الوصفية لمسار التشغيل كما هو موضح في المثال التالي:

struct PlaybackTrackMetadata {
…
    /** Tags from AudioTrack audio attributes */
    vec<AudioTag> tags;
};

و RecordTrackMetadata يتم تنفيذ بنية بطريقة مماثلة عن طريق إضافة علامات محددة لبيانات التعريف تسجيل المسار.

مسافات أسماء ملحقات البائعين

ابتداء من عام HAL V7، ملحقات بائع تتطلب إضافية {vendor} البادئة التي لا يشترط في V6. ل {vendor} بادئة لتكون صالحة، يجب أن يكون ثلاثة أو أكثر أبجدية الحروف.

استخدم التنسيق التالي في V7:

VX_ {بائع} _ {حروف / أرقام / _}

فيما يلي بعض الأمثلة على امتدادات بائع V7 الصالحة:

  • VX_ GOOGLE _VR
  • VX_ QCI _AMBIENT_MIC

معلومات الإصدار

يسرد الجدول التالي رقم إصدار HAL لكل إصدار Android.

نسخة أندرويد نسخة HAL
أندرويد 12 7.0
أندرويد 11 6.0
أندرويد 10 5.0
أندرويد 9 4.0
أندرويد 8 2.0