در اندروید ۱۳ و پایینتر، رابط صوتی HAL با استفاده از HIDL در فایلهای HIDL HAL (با پسوند .hal ) و طرحوارههای XSD برای فایلهای پیکربندی تعریف میشود که به شرح زیر نشان داده شده است.

شکل 1. رابط صوتی HAL.
فایلهای پیکربندی
فایلهای پیکربندی XML مربوط به سیاستهای صوتی و جلوههای صوتی، بخشی از رابط صوتی HIDL HAL محسوب میشوند. این فایلها باید با طرحوارههای خود مطابقت داشته باشند و این انطباق توسط آزمایشهای VTS تأیید میشود.
به عنوان بخشی از پیادهسازی audio HIDL HAL، شما باید یک فایل پیکربندی audio policy ایجاد کنید که توپولوژی صوتی را توصیف کند. قابلیتهای Audio HAL باید در فایل audio_policy_configuration.xml اعلام شوند تا چارچوب بتواند از آنها استفاده کند.
رابط برنامهنویسی کاربردی HIDL HAL صوتی
این بخش هسته، اثرات و APIهای رایج HAL برای HIDL را شرح میدهد.
هسته هال
برخی از رابطهای کلیدی Core HAL، با استفاده از HIDL، به شرح زیر است:
-
IDeviceFactory.halنقطه ورود به API است. -
IDevice.halوIPrimaryDevice.halحاوی متدهایی مانندsetMasterVolumeیاopenInputStreamهستند. - جریانها یکطرفه هستند و توسط AudioFlinger برای ارسال یا دریافت صدا به/از HAL از طریق
IStream.hal،IStreamOut.halوIStreamIn.halاستفاده میشوند.
جدول زیر محل اجزای مفید Core HAL HIDL را فهرست میکند:
| جزء اصلی HAL | مکان |
|---|---|
| آخرین نسخه API | /hardware/interfaces/audio/6.0 |
| انواع خاص برای آخرین API هسته HAL | /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 با استفاده از کتابخانههای اشتراکی قدیمی است. پیادهسازی پیشفرض همچنین میتواند به عنوان یک مرجع هنگام پیادهسازی نسخههای جدید Audio HALهایی که مستقیماً با درایورهای هسته تعامل دارند، در نظر گرفته شود.
اثرات هال
جدول زیر محل اجزای مفید Effects HAL را با استفاده از HIDL فهرست میکند:
| اثرات جزء HAL | مکان |
|---|---|
| آخرین نسخه API | /hardware/interfaces/audio/effect/6.0/ |
| طرحواره XSD فایل پیکربندی افکت | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd |
برای اطلاعات بیشتر، به نمونهای از پیادهسازی API مربوط به Effects HAL در /hardware/interfaces/audio/effect/all-versions/default/ و بخش Audio Effects مراجعه کنید.
هال مشترک
رابط برنامهنویسی کاربردی مشترک HAL با استفاده از HIDL شامل موارد زیر است:
- تعاریف (
/hardware/interfaces/audio/common/6.0/types.hal) که توسط APIهای Core و Effect به اشتراک گذاشته شدهاند. - ابزارهای کمکی (
/hardware/interfaces/audio/common/all-versions) که برای کمک به کدنویسی در برابر APIهای HIDL برای پیادهسازیها، کلاینتها و تستها استفاده میشوند.
بهروزرسانیهای Audio HAL V7
همانطور که در این بخش ذکر شده است، تغییرات قابل توجهی در نسخه ۷ Audio HAL در اندروید ۱۲ وجود دارد. Audio HAL V7 موارد زیر را انجام میدهد:
- مدلهای داده مورد استفاده توسط چارچوب و HAL را یکپارچه میکند.
- تکرار بین انواع داده HIDL (enums) و طرح XML مورد استفاده برای پیکربندی سیاست صوتی را به حداقل میرساند.
به طور خاص، تغییراتی در زمینههای زیر در Audio HAL V7 ایجاد شده است:
این تغییرات در بخشهای مربوط به خود با جزئیات بیشتری مورد بحث قرار گرفتهاند.
شمارشها
با شروع از Audio HAL V7، انواع شمارشی مورد استفاده در فایل پیکربندی سیاست صوتی فقط در طرحواره XSD تعریف میشوند و نه در HIDL.
در Audio HAL نسخه ۶، مقادیر انواع شمارشی (مانند AudioFormat ) در types.hal نیز در فایل پیکربندی سیاست صوتی XSD schema تعریف شدهاند و باعث ایجاد یک تکرار میشوند. برای جلوگیری از این امر در نسخه ۷، انواع شمارشی به string تغییر یافته و تمام مقادیر شمارشی ممکن در طرح XSD فهرست شدهاند.
شکل ۲ برخی از تغییرات در نوع شمارشی AudioFormat در نسخه ۷ را مقایسه میکند:

شکل ۲. مقایسه برخی از تغییرات اعمال شده در شمارش AudioFormat.
برای مشاهدهی انواع enum که به string تبدیل شدهاند، به لیست زیر مراجعه کنید:
-
AudioChannelMask -
AudioContentType -
AudioDevice: قابل توسعه توسط فروشنده -
AudioFormat: قابل توسعه توسط فروشنده -
AudioGainMode -
AudioSource -
AudioStreamType -
AudioUsage
مقادیر رشتهای enum را ارسال کنید
مقادیر رشتهای برای انتقال اطلاعات به عنوان مقادیر شمارشی در مرز رابط HAL استفاده میشوند. هم چارچوب و هم بستهبندی HAL از مقادیر شمارشی صحیح برای پیادهسازی منطق کسبوکار استفاده میکنند و از رویکرد تبدیل نشان داده شده در شکل 3 استفاده میکنند:

شکل ۳. ارسال مقادیر رشتهای enum.
به عنوان مثال، برای ارسال مقداری از نوع فرمت صوتی از چارچوب به فروشنده:
- مقدار شمارشی
AudioFormatبه یک مقدار رشتهای درlibaudiohalتبدیل شده و به HAL منتقل میشود. - در سمت HAL، بستهبندی پیشفرض، رشته را به یک مقدار شمارشی تبدیل میکند که به HAL قدیمی منتقل میشود.
تغییرات طرحواره XML
داشتن لیستهای کامل از مقادیر شمارشی در تعریف طرحواره XML (XSD) امکان اعتبارسنجی بهتر فایل XML پیکربندی سیاست صوتی توسط VTS را فراهم میکند. ما تغییراتی در فایل پیکربندی سیاست صوتی مورد استفاده با HAL V7 ایجاد کردهایم تا با XSD مطابقت داشته باشد.
در نسخه ۷، به جای نمادهای , (کاما) و | (نوار عمودی) که در نسخه ۶ و پایینتر استفاده میشوند، از یک کاراکتر استاندارد ␣ (فاصله) برای جدا کردن لیست مقادیر در ویژگیها (مانند نرخ نمونهبرداری، ماسکهای کانال و پرچمها) استفاده میشود. همانطور که در مثال زیر مشاهده میشود، از یک فاصله برای جدا کردن لیست مقادیر برای 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 استفاده میشود. برای حذف این افزونگی، در نسخه ۷، نوع داده AudioConfigBase و سایر انواع داده به صورت زیر تعریف شدهاند:
AudioConfigBase := <format, sampling rate, channel mask>AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>استفاده شده توسط
AudioConfig،AudioOffloadInfo،AudioPortConfigAudioProfile := <format, {sampling rates}, {channel masks}>جایگزین مجموعههای آزاد در
AudioPort/PortConfigمیشود.AudioPortExtendedInfo := device | mix | sessionجایگزین unionها در
AudioPort/PortConfigمیشود.
برچسبهای فروشنده
علاوه بر انواع و فرمتهای دستگاه، فروشندگان میتوانند برچسبهای سفارشی برای فرادادههای آهنگ صوتی اضافه کنند.
برای پخش و ضبط فرادادههای آهنگ، فروشندگان میتوانند برچسبهای خود را که برای افزودن ویژگیها به جریانهای ورودی/خروجی صوتی استفاده میشوند، از برنامهها به HAL منتقل کنند.
تگهای فروشنده برای فرادادههای آهنگ پخششده، همانطور که در مثال زیر مشاهده میشود، اضافه میشوند:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
ساختار RecordTrackMetadata با افزودن تگهای مخصوص متادیتای آهنگ ضبط، به روشی مشابه پیادهسازی میشود.
فضای نام افزونههای فروشنده
از نسخه ۷ به بعد HAL، افزونههای فروشنده به یک پیشوند اضافی {vendor} نیاز دارند که در نسخه ۶ لازم نیست. برای اینکه پیشوند {vendor} معتبر باشد، باید سه یا چند کاراکتر الفبایی-عددی داشته باشد.
از فرمت زیر در V7 استفاده کنید:
VX_{ vendor }_{ letters/numbers }
در زیر چند نمونه از افزونههای معتبر فروشندگان V7 آمده است:
-
VX_ GOOGLE _VR -
VX_ QCI _AMBIENT_MIC
اطلاعات نسخه
جدول زیر شماره نسخه HAL را برای هر نسخه اندروید فهرست میکند:
| نسخه اندروید | نسخه HIDL HAL |
|---|---|
| اندروید ۱۳ | ۷.۱ |
| اندروید ۱۲ | ۷.۰ |
| اندروید ۱۱ | ۶.۰ |
| اندروید ۱۰ | ۵.۰ |
| اندروید ۹ | ۴.۰ |
| اندروید ۸ | ۲.۰ |