لایه انتزاعی سخت افزار صوتی اندروید (HAL) APIهای فریمورک سطح بالاتر و مخصوص صدا در android.media
را به درایورهای صوتی و سخت افزار زیرین متصل می کند. Audio HAL رابط استانداردی را که سرویس های صوتی به آن فراخوانی می کنند، تعریف می کند. برای اینکه سخت افزار صوتی به درستی کار کند باید اجرا شود.
این صفحه یک نمای کلی از HAL صوتی و جزئیات API و الزامات پیاده سازی آن را ارائه می دهد.
رابط صوتی HAL
رابط صوتی HAL با استفاده از HIDL در فایلهای .hal
و طرحوارههای XSD برای فایلهای پیکربندی تعریف میشود که به صورت زیر نشان داده شده است.
شکل 1. رابط صوتی HAL
فایل های پیکربندی
فایل های پیکربندی XML خط مشی صوتی و جلوه های صوتی بخشی از رابط صوتی HAL در نظر گرفته می شوند. این فایلها باید با طرحوارههای خود مطابقت داشته باشند و انطباق با آزمایشهای VTS تأیید میشود.
به عنوان بخشی از اجرای HAL صوتی، باید یک فایل پیکربندی خط مشی صوتی ایجاد کنید که توپولوژی صوتی را توصیف کند. قابلیت های صوتی HAL باید در فایل audio_policy_configuration.xml
اعلام شود تا چارچوب بتواند از آنها استفاده کند.
صوتی HAL API
HAL صوتی شامل APIهای زیر است:
- هسته HAL
- اثرات HAL
- HAL معمولی
هر یک از این API ها در بخش های زیر توضیح داده شده است.
هسته HAL
Core HAL API اصلی است که توسط 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 |
پیادهسازی پیشفرض Core HAL API ( /hardware/interfaces/audio/core/all-versions/default/
) یک بستهبندی حول اجرای Pre-Treble HAL با استفاده از کتابخانههای مشترک قدیمی است. پیاده سازی پیش فرض همچنین می تواند به عنوان یک مرجع در هنگام اجرای نسخه های جدید HAL های صوتی که مستقیماً با درایورهای هسته تعامل دارند در نظر گرفته شود.
اثرات 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/
) و بخش Audio Effects را ببینید.
HAL معمولی
Common HAL کتابخانه ای از انواع داده های رایج است که توسط Core و Effects HAL API ها استفاده می شود. هیچ رابط و هیچ تست VTS مرتبطی ندارد زیرا فقط ساختارهای داده را تعریف می کند. Common HAL API شامل موارد زیر است:
- تعاریف (
/hardware/interfaces/audio/common/6.0/types.hal
) به اشتراک گذاشته شده توسط Core و Effect APIها - ابزارهای کاربردی (
/hardware/interfaces/audio/common/all-versions
) برای کمک به کدنویسی در برابر API های HIDL برای پیاده سازی ها، کلاینت ها و آزمایش ها استفاده می شود.
الزامات
علاوه بر اجرای HAL صوتی و ایجاد فایل پیکربندی خط مشی صوتی، الزامات HAL زیر باید رعایت شود:
- اگر ضبط برای Sound Trigger (گرفتن از hotword DSP buffer) توسط یک نمایه ورودی پشتیبانی میشود، پیادهسازی باید از تعداد جریانهای فعال در این نمایه مطابق با تعداد جلسات همزمان پشتیبانی شده توسط Sound Trigger HAL پشتیبانی کند.
- همزمانی تماس صوتی TX و ضبط از پردازنده برنامه همانطور که در صفحه ضبط همزمان توضیح داده شده است.
بهروزرسانیهای Audio HAL V7
به منظور رسیدگی به مشکلات سازگاری با عقب، AIDL پایدار برای همه تغییرات HAL از Android 13 اجباری است. برای پشتیبانی و بهبود پذیرش AIDL در Android 13 و بالاتر، Audio HAL V7 کارهای زیر را انجام میدهد:
- مدل های داده استفاده شده توسط چارچوب و HAL را یکسان می کند.
- تکرار بین انواع داده های HIDL (enums) و طرح XML مورد استفاده برای پیکربندی خط مشی صوتی را به حداقل می رساند.
به طور خاص، تغییرات در قسمت های زیر در صوتی HAL V7 ایجاد می شود:
این تغییرات در بخش های مربوطه با جزئیات بیشتر مورد بحث قرار گرفته است.
شمارش ها
با شروع در Audio HAL V7، انواع برشماری استفاده شده در فایل پیکربندی خط مشی صوتی فقط در طرح XSD و نه در HIDL تعریف شده است.
در صوتی HAL V6، مقادیر انواع enum (مانند AudioFormat
) در types.hal
نیز در طرحواره پیکربندی خط مشی صوتی فایل XSD تعریف شده است و یک تکرار ایجاد می کند. برای جلوگیری از این امر در V7، انواع enum به string
تغییر می کنند و به جای آن همه مقادیر شمارش ممکن در طرح XSD فهرست می شوند.
برای مقایسه برخی از تغییرات نوع Enum AudioFormat
در V7 به شکل 2 مراجعه کنید.
شکل 2. مقایسه برخی از تغییرات در AudioFormat enum
برای انواع enum که به String
تبدیل شده اند به لیست زیر مراجعه کنید:
-
AudioChannelMask
-
AudioContentType
-
AudioDevice
: قابل توسعه توسط فروشنده -
AudioFormat
: قابل توسعه توسط فروشنده -
AudioGainMode
-
AudioSource
-
AudioStreamType
-
AudioUsage
مقادیر enum رشته را پاس کنید
مقادیر رشته برای انتقال اطلاعات به عنوان مقادیر شمارش در مرز رابط HAL استفاده می شود. هم چارچوب و هم بسته بندی HAL از مقادیر عدد صحیح برای اجرای منطق تجاری استفاده می کنند و از رویکرد تبدیل نشان داده شده در شکل 3 استفاده می کنند.
شکل 3. ارسال مقادیر enum رشته
به عنوان مثال، برای ارسال مقداری از نوع فرمت صوتی از فریمورک به فروشنده:
- مقدار enum
AudioFormat
به یک مقدار رشته درlibaudiohal
می شود و به HAL ارسال می شود. - در سمت HAL، wrapper پیشفرض رشته را به یک مقدار enum تبدیل میکند که به HAL قدیمی ارسال میشود.
تغییرات طرح واره XML
داشتن لیست کاملی از مقادیر enum در تعریف طرحواره XML (XSD) امکان اعتبارسنجی فایل XML تنظیمات خط مشی صوتی بهتر توسط VTS را فراهم می کند. تغییراتی در فایل پیکربندی خط مشی صوتی مورد استفاده با HAL V7 برای مطابقت با XSD ایجاد شده است.
در ␣
، به جای ,
(کاما) و |
(نوار عمودی) نمادهای مورد استفاده در 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]>
استفاده شده توسط
AudioPortConfig
،AudioConfig
،AudioOffloadInfo
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 را برای هر نسخه اندروید فهرست می کند.
نسخه اندروید | نسخه HAL |
---|---|
اندروید 13 | 7.1 |
اندروید 12 | 7.0 |
اندروید 11 | 6.0 |
اندروید 10 | 5.0 |
اندروید 9 | 4.0 |
اندروید 8 | 2.0 |