سرویس صوتی خودرو از سیاست صوتی پویای Core Audio برای تسهیل موارد استفاده در خودروها استفاده میکند.
پخش صوتی جداگانه برای هر مسافر، که به آن صدای چند منطقهای میگویند، که در آن هر منطقه امکان پخش همزمان صدا را فراهم میکند.
پیکربندی پویای منطقه صوتی
پخش صدای منطقه اصلی مسافران.
آینه صوتی سرنشین.
در هر مورد استفاده، سرویس صوتی خودرو از سیاست صوتی پویا برای هدایت خودکار صدا به دستگاه خروجی تعیینشده استفاده میکند.
صدای چند منطقهای
صدای چند منطقهای به چندین کاربر این امکان را میدهد که همزمان با AAOS تعامل داشته باشند. مجموعهای از دستگاههای خروجی به یک منطقه مرتبط هستند و هر منطقه فوکوس صدا و سطح صدا را حفظ میکند. مسافران میتوانند به صدای خود گوش دهند در حالی که راننده به منبع دیگری در منطقه اصلی (معمولاً کابین اصلی) گوش میدهد.
معماری صوتی چند منطقهای

شکل ۱. معماری سرویس صوتی خودرو.
مناطق صوتی خودرو، انتزاعی از خروجیهای صوتی، فوکوس صوتی و سایر تنظیمات صوتی هستند که همگی میتوانند به طور مستقل مدیریت شوند. برای اهداف مسیریابی، هر منطقه به عنوان مجموعهای از دستگاههای گذرگاه خروجی صوتی تعریف میشود که در پیکربندی سیاست صوتی مرتب شدهاند. دستگاهها برای هر تعریف منطقه صوتی متفاوت هستند. در شکل 1، دستگاههای گذرگاه 1 تا 5 متعلق به منطقه صفر، دستگاههای گذرگاه 6 تا 8 متعلق به منطقه یک و دستگاههای گذرگاه 9 تا 11 متعلق به منطقه دو هستند.
پیکربندی سیستم صوتی خودرو
معمولاً دستگاههای خروجی به یک منطقه صوتی اختصاص داده میشوند. هر منطقه صوتی در car_audio_configuration.xml تعریف شده است. قطعه کد زیر پیکربندی صوتی خودرو را برای شکل ۱ نشان میدهد:
<carAudioConfiguration version="3">
<zones>
<zone name="Zone0" audioZneId="0" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGoups>
<group>
<device address="bus_1">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_2">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_6">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_7">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
...
...
</zones>
</carAudioConfiguration>
occupantZoneId یک تعریف سرویس خودرو است که توسط CarOccupantZoneManager مدیریت میشود. این سرویس در خودروها برای تعریف نگاشت یک کاربر در خودرو به یک مکان صندلی خاص استفاده میشود. CarOccupantZoneService همچنین نگاشت از منطقه سرنشین به نمایشگرها، سایر لوازم جانبی و کاربر را پس از ورود کاربر به نمایشگر تعریف میکند. یک منطقه صوتی دارای موارد زیر است:
یک شناسه منطقه صوتی و یک شناسه منطقه سرنشین.
- منطقه صوتی را به منطقه سرنشینان (صندلی، نمایشگرها و سایر لوازم جانبی) نگاشت میکند.
- مشخص کنید که به کدام شناسه کاربری هنگام ورود به سیستم، یک منطقه صوتی اختصاص داده شده است.
فهرستی از پیکربندیهای صوتی. هر پیکربندی صوتی مجموعهای از گروههای صدا دارد. هر گروه صدا مجموعهای از دستگاههای گذرگاه صدا دارد.
وقتی میزان صدا تغییر میکند، تمام دستگاههای صوتی در یک گروه به یک روش کنترل میشوند.
به هر دستگاه صوتی فهرستی از ویژگیهای صوتی اختصاص داده میشود. این اطلاعات برای ساخت ترکیبهای سیاست صوتی با ویژگیهای صوتی اختصاص داده شده متفاوت استفاده میشود.
این پیکربندی اجازه میدهد تا کاربردهای مختلف ویژگیهای صوتی به دستگاههای خروجی مختلف در هر منطقه هدایت شوند. بسته به مورد استفاده، صداهای مختلف میتوانند به طور همزمان پخش شوند. به عنوان مثال، میتوانید کابین اصلی (منطقه اصلی) را طوری پیکربندی کنید که صداهای رسانهای را در همه بلندگوها پخش کند اما صداهای ناوبری فقط در بلندگوهای نزدیک به راننده پخش شود. با پخش همزمان صدا، کابین اصلی در حالی که ناوبری به راننده تحویل داده میشود، به گوش دادن به رسانه ادامه میدهد.
گردش کار ورود مسافر با صدای چند منطقهای
نمودار توالی زیر، جریان فعالسازی مسیریابی صوتی را هنگام ورود مسافر به نمایشگر مربوطه نشان میدهد:

شکل ۲.
در این ترتیب، ورود کاربر از طریق سرویس منطقه سرنشین به سرویس صوتی خودرو منتشر میشود.
سرویس صوتی خودرو (برای یک منطقه صوتی خاص) از رابط برنامهنویسی کاربردی
AudioPolicy#removeUserIdDeviceAffinityبرای حذف وابستگیهای دستگاه کاربر استفاده میکند. این رابط برنامهنویسی یک شناسه کاربر میگیرد. در این مورد، کاربر منطقه قبلی.رابط برنامهنویسی کاربردی
AudioPolicy#setUserIdDeviceAffinityکاربر جدید را به یک منطقه اختصاص میدهد که شناسه کاربر و تمام دستگاههای مربوط به پیکربندی منطقه خاص را دریافت میکند.
پیکربندیهای پویای منطقه
در اندروید ۱۴، پیکربندیهای پویای منطقهای معرفی شدهاند تا به تولیدکنندگان اصلی تجهیزات (OEM) اجازه دهند مجموعههای مختلفی از دستگاهها را برای مسافران پیکربندی کنند. این مورد استفاده به مسافران صندلی عقب اجازه میدهد تا بین بلندگوی پشت سری صندلی عقب و هدفون جانبی صندلی عقب جابجا شوند.
در این حالت، دو پیکربندی مورد نیاز است. یکی برای پشت سری صندلی عقب و دیگری برای هدفون. صدای یک کاربر خاص فقط به یکی از پیکربندیها در هر زمان هدایت میشود.

شکل ۳. گردش کار پیکربندی پویای منطقه.
شکل ۳ معماری گردش کار پیکربندی ناحیه پویا را نشان میدهد. ناحیه صوتی ۱ شامل دو پیکربندی، Config 0 و Config 1 است که به ترتیب با بلندگوی دستگاه خروجی و پشت سری مرتبط هستند.
پس از ورود به سیستم، کاربر به طور خودکار پیکربندی پیشفرض را دریافت میکند. هنگامی که کاربر تصمیم به تغییر پیکربندیها میگیرد، معمولاً از طریق رابط کاربری سیستم، سرویس صوتی خودرو بین دو پیکربندی سوئیچ میکند. به این ترتیب، دستگاه خروجی بین بلندگوی Z1 و پشت سری Z1 تغییر میکند.
قطعه کد زیر تنظیمات مربوط به این پیکربندی پویای منطقه را نشان میدهد.
<carAudioConfiguration version="3">
<zones>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="Zone 1 Config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_100">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
<zoneConfig name="Zone 1 Config 1">
<volumeGroups>
<group>
<device address="bus_101">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
</zones>
برای تسهیل مدیریت پیکربندیهای صوتی، مدیر صوتی خودرو، APIهایی را برای مدیریت پیکربندیها ارائه میدهد:
- پیکربندیهای کوئری موجود برای یک منطقه.
- پیکربندی تنظیمشدهی فعلی برای یک منطقه را پرسوجو کنید.
- به پیکربندی متفاوتی تغییر دهید.
یک برنامه یا سرویس رابط کاربری سیستم میتواند از این API برای مدیریت پیکربندی منطقه صوتی، همانطور که در شکل ۴ نشان داده شده است، استفاده کند. API کوئری این دو را در اختیار مسافر قرار میدهد. کاربر میتواند با لمس یک دستور، پیکربندی متفاوتی را برای پیکربندی مورد نظر خود انتخاب کند.

شکل ۴. گردش کار پیکربندی پویای منطقه.
پخش صدای مسافر منطقه اصلی
پخش صدای سرنشین در منطقه اصلی، قابلیتی است که در اندروید ۱۴ معرفی شد تا به سرنشینان اجازه دهد صدای رسانه خود را در منطقه اصلی پخش کنند. به این ترتیب، صدای رسانه سرنشین میتواند در حالی که راننده کنترل کامل را در دست دارد، به کابین اصلی پخش شود.
شکل زیر نسخه سادهشدهای از معماری پخش صدای رسانهای سرنشینان در منطقه اصلی را نشان میدهد.

شکل ۵. گردش کار پیکربندی پویای منطقه.
تصویر نشان میدهد که دستگاه خروجی رسانه برای راننده با مسافر به اشتراک گذاشته شده است، این اتفاق فقط زمانی میافتد که مسافر در حالت پخش به منطقه اصلی باشد. سیاست صوتی پویا همچنین برای مدیریت مسیریابی صوتی برای راننده استفاده میشود، اما هیچ تغییری در وابستگیهای دستگاه برای راننده اعمال نمیشود. برای مسافر، لیست دستگاههای خروجی به شرح زیر تغییر میکند:
- دستگاه خروجی رسانه برای مسافر از لیست دستگاهها حذف شده است
- دستگاه خروجی رسانه برای درایور به لیست دستگاهها اضافه شد
- دستگاههای خروجی باقیمانده برای مناطق صوتی سرنشینان در فهرست دستگاهها باقی میمانند.
این فهرست جدید از دستگاهها توسط رابط برنامهنویسی کاربردی AudioPolicy#setUserIdDeviceAffinity به مسافر اختصاص داده میشود. پارامترهای ارسالی به API، فهرست دستگاهها و شناسه کاربر مسافر هستند. وقتی سرویس سیاست صوتی سیستم صوتی درخواست میکند که کدام میکس صوتی برای آهنگ رسانهای مرتبط با مسافر انتخاب شود، میکس صوتی رسانهای مرتبط با منطقه اصلی انتخاب میشود.
یک الزام کلیدی برای پخش صدای منطقه اصلی این است که دستگاه خروجی رسانه منطقه اصلی از سایر کاربردهای ویژگیهای صوتی جدا باشد. در غیر این صورت، در طول ساخت میکسهای صوتی، ویژگیهای صوتی دیگری به میکس اضافه میشوند. هنگامی که انتخاب میکس توسط سیستم صوتی انجام میشود، تمام صداهای متصل به میکس برای پخش در کابین اصلی انتخاب میشوند.
آینه صوتی منطقه سرنشین
ویژگی آینه صوتی به مسافران این امکان را میدهد که صدا را به اشتراک بگذارند. ویژگی آینه، دادههای صوتی را در هر منطقه صوتی کپی میکند تا همه مسافران بتوانند به صدای یکسانی گوش دهند. در این حالت، فوکوس صدا با مسافرانی که در آینهسازی صوتی شرکت دارند، به اشتراک گذاشته میشود.
مسیریابی آینه صوتی
برای فعال کردن آینهسازی صوتی، حداقل به دو سرنشین نیاز است. در نتیجه، یک پیکربندی صوتی با تنها دو منطقه صوتی برای سرنشینان، به یک دستگاه خروجی آینه نیاز دارد. با تعریف بالا، میتوان دو جلسه آینهسازی همزمان را آغاز کرد.
شکل زیر نمودار سادهای از آینهسازی صوتی چند منطقهای بین دو مسافر را نشان میدهد. صدای هر دو مسافر به یک دستگاه آینه صوتی، bus_1000 ، هدایت میشود. Audio HAL سیگنال را به مناطق منبع کپی میکند.

شکل ۶. گردش کار پیکربندی پویای منطقه.
این مسیریابی فقط زمانی فعال میشود که مسافران در حالت آینهسازی باشند. در غیر این صورت، دستگاههای مربوطه برای منطقه صوتی به مسافران اختصاص داده میشوند. وقتی آینهسازی برای اولین بار برای یک مسافر فعال میشود، رابط برنامهنویسی کاربردی AudioPolicy#setUserIdDeviceAffinity مسیریابی را تغییر میدهد:
- دستگاه خروجی رسانه برای مسافر از فهرست دستگاهها حذف شده است.
- دستگاه خروجی آینهای به لیست دستگاهها اضافه شد.
- دستگاههای خروجی باقیمانده برای منطقه صوتی سرنشین در فهرست دستگاهها باقی میمانند.
با فهرست دستگاهها، API با فهرست بهروز شده دستگاهها و شناسه کاربری مسافر فراخوانی میشود. تصویر زیر نمودار توالی گردش کار آینه صوتی را نشان میدهد.

شکل ۷. گردش کار آینه صوتی.
در شکل 7، APIهای مدیر صدای خودرو برای مدیریت انعکاس صدا از سرویس سیستم رسانه فراخوانی میشوند. به طور خاص، API برای فعال کردن انعکاس صدا برای کاربر 1 و کاربر 2، CarAudioManager#enableMirrorForAudioZones .
سرویس صوتی خودرو، مسیریابی صوتی را برای سرنشینان کاربر، همانطور که در بالا توضیح داده شد، پیکربندی میکند. سرویس صوتی خودرو همچنین سیگنالی را به HAL صوتی ارسال میکند تا صدا را از دستگاه آینه به مناطق مربوطه پیکربندی و کپی کند.
در تصویر بالا، سرویس صوتی خودرو mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20 را ارسال میکند.
کجا،
bus_1000 گذرگاه مبدا و bus_10 و bus_20 گذرگاههای مقصد هستند.
سیگنالی که از طریق رابط برنامهنویسی کاربردی AudioManager#setParameters ارسال میشود و از طریق سرویس صوتی به HAL میرسد، در نمودار توالی نشان داده نشده است.
پس از غیرفعال کردن آینه صوتی، سیگنال زیر ارسال میشود، mirroring_src=bus_1000;mirroring=off . این سیگنال میتواند توسط HAL برای غیرفعال کردن تکثیر صدا در هنگام غیرفعال بودن آینه صوتی استفاده شود. برای تعریف دستگاههای آینه صوتی، فایل پیکربندی صدای خودرو شامل بخشی به نام mirroringDevices است، همانطور که در قطعه کد زیر نشان داده شده است.
در این قطعه کد، دو دستگاه آینهسازی bus_1000 و bus_2000 تعریف شدهاند، به طوری که چهار مسافر میتوانند از آینهسازی صوتی استفاده کنند.
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>