تعمل طبقة تجريد أجهزة الصوت (HAL) في Android على توصيل واجهات برمجة التطبيقات (API) الخاصة بإطار عمل الصوت عالي المستوى في android.media
تشغيل الصوت والأجهزة الأساسية. يحدد Audio HAL الواجهة القياسية التي تستدعيها خدمات الصوت. يجب أن يتم تنفيذه حتى تعمل أجهزة الصوت بشكل صحيح.
تقدم هذه الصفحة نظرة عامة على HAL الصوتي وتوفر تفاصيل عن واجهة برمجة التطبيقات ومتطلبات التنفيذ.
واجهة الصوت HAL
يتم تعريف واجهة HAL الصوتية باستخدام HIDL في ملفات .hal
ومخططات XSD لملفات التكوين ، كما هو موضح على النحو التالي.
الشكل 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.
الشكل 2. مقارنة بين بعض التغييرات التي تم إجراؤها على تعداد تنسيق الصوت
راجع القائمة التالية لمعرفة أنواع التعداد التي تم تحويلها إلى String
:
-
AudioChannelMask
-
AudioContentType
-
AudioDevice
: البائع الموسعة -
AudioFormat
: قابل للتوسيع من البائع -
AudioGainMode
-
AudioSource
-
AudioStreamType
-
AudioUsage
تمرير قيم تعداد السلسلة
تُستخدم قيم السلسلة لنقل المعلومات كقيم تعداد عبر حدود واجهة HAL. يستخدم كل من إطار العمل والغلاف HAL قيم عدد صحيح لتنفيذ منطق الأعمال واستخدام نهج التحويل الموضح في الشكل 3 .
الشكل 3. تمرير قيم تعداد السلسلة
كمثال ، لتمرير قيمة نوع تنسيق الصوت من الإطار إلى البائع:
- يتم تحويل قيمة التعداد لـ
AudioFormat
إلى قيمة سلسلة فيlibaudiohal
ويتم تمريرها إلى HAL. - على جانب 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 |