صوت HAL

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

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

واجهة الصوت HAL

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

audio_hal

الشكل 1. واجهة Audio 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 هي نقطة الدخول إلى واجهة برمجة التطبيقات.
  • يحتوي 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

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

تأثيرات HAL

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

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

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

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

HAL المشترك

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

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

متطلبات

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

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

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

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

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

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

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

التعداد

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

في ملف الصوت HAL V6 ، يتم تحديد قيم أنواع التعداد (مثل AudioFormat ) في أنواع. types.hal أيضًا في مخطط XSD لملف تكوين السياسة الصوتية ، مما يؤدي إلى إنشاء تكرار. لتجنب ذلك في V7 ، يتم تغيير أنواع التعداد إلى string ويتم سرد كافة قيم التعداد الممكنة في مخطط XSD بدلاً من ذلك.

انظر الشكل 2 لمقارنة بعض التغييرات على نوع تعداد AudioFormat في V7.

audioformat-change

الشكل 2. مقارنة بين بعض التغييرات التي تم إجراؤها على تعداد تنسيق الصوت

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

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

تمرير قيم تعداد السلسلة

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

audio-passing-values

الشكل 3. تمرير قيم تعداد السلسلة

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

  1. يتم تحويل قيمة التعداد لـ AudioFormat إلى قيمة سلسلة في libaudiohal ويتم تمريرها إلى HAL.
  2. على جانب HAL ، يحول المجمّع الافتراضي السلسلة إلى قيمة تعداد ، والتي يتم تمريرها إلى 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 مثل النقابات الآمنة.

على سبيل المثال ، في الإصدار السادس وما بعده ، يتم استخدام ثلاثي <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_{ vendor }_{ letters/numbers }

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

  • VX_ GOOGLE _VR
  • VX_ QCI _AMBIENT_MIC

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

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

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