در Android 10، car_audio_configuration.xml
جایگزین car_volumes_groups.xml
و IAudioControl.getBusForContext
شد. فایل های خط مشی صوتی که معمولاً در پارتیشن فروشنده موجود است، پیکربندی سخت افزار صوتی برد را نشان می دهد. همه دستگاههای ارجاعشده در car_audio_configuration.xml
باید در audio_policy_configuration.xml
تعریف شوند.
شکل 1 نمای کلی از معماری سرویس صوتی خودرو را نشان می دهد که در آن سرویس صوتی خودرو فایل پیکربندی صدای خودرو را برای تنظیم صدا برای دستگاه می خواند.
شکل 1. نمای کلی معماری صوتی خودرو.
فایل پیکربندی صدای خودرو را در vendor/etc/
یا system/etc/
روی دستگاه قرار دهید، و vendor/etc/
اولین جایی است که سرویس صوتی خودرو برای فایل جستجو می کند. خدمات صوتی خودرو car_audio_configuration.xml
را برای تعیین پیکربندی صدا می خواند.
مناطق صوتی خودرو:
- هر منطقه صوتی شامل یک شناسه منطقه صوتی منحصر به فرد است.
- هر منطقه صوتی را می توان به یک منطقه ساکن نگاشت کرد.
عملکردهای صوتی در هر منطقه مستقل از یکدیگر هستند:
- فوکوس صوتی
- مسیریابی صدا
- اردک صوتی
گروه های حجم خودرو:
تمام دستگاههای صوتی که دارای یک گروه حجم هستند، با تغییرات بهره یکسان کنترل میشوند. پیکربندی افزایش صدا برای همه دستگاههای یک گروه باید یکسان باشد.
زمینه صوتی به نقشه برداری دستگاه های صوتی. از این برای ساخت یک ترکیب صوتی استفاده کنید که استفاده از صدا را به یک دستگاه خروجی نگاشت می کند.
همه زمینه های صوتی باید در یک منطقه نمایش داده شوند. این اجازه می دهد تا مسیریابی صدا به طور دقیق برای همه موارد استفاده از ویژگی های صوتی تنظیم شود.
زمینه های صوتی
برای ساده کردن پیکربندی صدای AAOS، کاربردهای مشابه در CarAudioContexts
گروهبندی شدهاند. این زمینههای صوتی در سراسر CarAudioService
برای تعریف مسیریابی، گروههای صدا، فوکوس صوتی و مدیریت ducking استفاده میشوند. زمینه های صوتی استاتیک در AAOS در این جدول فهرست شده است.
این جدول نگاشت بین زمینه های صوتی و کاربردها را شرح می دهد. ردیف های برجسته برای استفاده از سیستم جدید ارائه شده است.
CarAudioContext | کاربردهای ویژگی مرتبط |
---|---|
MUSIC | UNKNOWN GAME MEDIA |
NAVIGATION | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
CALL_RING | NOTIFICATION_RINGTONE |
CALL | VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARM | ALARM |
NOTIFICATION | NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
EMERGENCY | EMERGENCY |
SAFETY | SAFETY |
VEHICLE_STATUS | VEHICLE_STATUS |
ANNOUNCEMENT | ANNOUNCEMENT |
مسیریابی AAOS را فعال کنید
برای استفاده از مسیریابی مبتنی بر AAOS، باید پرچم audioUseDynamicRouting
را روی true
تنظیم کنید:
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
هنگامی که false
، مسیریابی و بسیاری از CarAudioService
غیرفعال می شود و AAOS به رفتار پیش فرض AudioService
برمی گردد.
موتور سیاست صوتی قابل تنظیم
برای گسترش بیشتر مدیریت صدای خودرو در اندروید 14، AAOS استفاده از مدیریت صدا را از طریق موتور سیاست صوتی قابل تنظیم (CAP) معرفی کرد. انجام این کار انعطاف پذیری بیشتری را برای کنترل مسیریابی صدا و مدیریت حجم صدا فراهم می کند و تعریف همه کاره را ارائه می دهد:
شما می توانید موتور سیاست صوتی قابل تنظیم (CAP) را با استفاده از useCoreAudioVolume
و useCoreAudioRouting
فعال کنید، برای جزئیات بیشتر به موتور خط مشی صوتی قابل تنظیم مراجعه کنید.
منطقه اولیه
به طور پیش فرض، تمام صداها به منطقه اصلی هدایت می شوند. فقط یک ناحیه اصلی وجود دارد که در پیکربندی با ویژگی isPrimary="true"
نشان داده می شود. منطقه اصلی به طور خودکار به Audiomanager.PRIMARY_AUDIO_ZONE
اختصاص داده می شود.PRIMARY_AUDIO_ZONE.
پیکربندی نمونه (نسخه 2)
به عنوان مثال، یک وسیله نقلیه ممکن است دو منطقه داشته باشد، یک منطقه اولیه و یک سیستم سرگرمی صندلی عقب. در این سناریو می توانید یک car_audio_configuration.xml
احتمالی نسخه 2 را به صورت زیر طراحی کنید:
<audioZoneConfiguration version="2.0">
<zone name="primary zone" isPrimary="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="music"/>
<context context="announcement"/>
</device>
<device address="bus3_call_ring_out">
<context context="call_ring"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
<group>
<device address="bus4_call_out">
<context context="call"/>
</device>
</group>
<group>
<device address="bus5_alarm_out">
<context context="alarm"/>
</device>
</group>
<group>
<device address="bus7_system_sound_out">
<context context="system_sound"/>
<context context="emergency"/>
<context context="safety"/>
<context context="vehicle_status"/>
</device>
</group>
</volumeGroups>
</zone>
<zone name="rear seat zone" audioZoneId="1">
<volumeGroups>
<group>
<device address="bus100_rear_seat">
<context context="music"/>
<context context="navigation"/>
<context context="voice_command"/>
<context context="call_ring"/>
<context context="call"/>
<context context="alarm"/>
<context context="notification"/>
<context context="system_sound"/>
<context context="emergency"/>
<context context="safety"/>
<context context="vehicle_status"/>
<context context="announcement"/>
</device>
</group>
</volumeGroups>
</zones>
</audioZoneConfiguration>
در این مثال، منطقه اولیه برخی از زمینه های صوتی را از دستگاه های مختلف جدا می کند. این HAL را قادر میسازد تا جلوههای مختلف پس از پردازش را اعمال کند و با استفاده از سختافزار خودرو، خروجی را روی هر دستگاه ترکیب کند. دستگاه ها در چندین گروه حجمی مرتب شده اند: رسانه، ناوبری، تماس ها، آلارم ها و صداهای سیستم. اگر سیستم برای useFixedVolume
پیکربندی شده باشد، سطح صدا برای هر گروه به HAL منتقل میشود تا در خروجی این دستگاهها اعمال شود.
برای منطقه اولیه، توصیه می کنیم که صداهای سیستم جدا از صداهای دیگر باشد. این اجازه می دهد تا صداهای خودرو با اولویت بالاتری برخورد شود. سرویس صوتی خودرو در حال حاضر این تمایزها را برای صداهای خودرو از نظر فوکوس و مدیریت اردک ایجاد کرده است. به عنوان مثال، یک درخواست فوکوس صدای اضطراری اولویت بیشتری نسبت به درخواست فوکوس دیگر دارد.
در مثال منطقه ثانویه، تمام زمینه های صوتی به یک دستگاه واحد و یک گروه حجم هدایت می شوند.
تعریف گروه حجمی برای موتور CAP
برای استفاده از مدیریت حجم از طریق موتور CAP همانطور که در موتور خط مشی صوتی قابل تنظیم ذکر شده است، تعریف گروه حجم نیز باید شامل یک نام باشد:
<group name="media">
<device address="bus0_media_out">
<context context="music"/>
<context context="announcement"/>
</device>
<device address="bus3_call_ring_out">
<context context="call_ring"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
<group name="navigation">
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
این نام گروه حجم باید با نام حجم تعریف شده در موتور CAP مطابقت داشته باشد. علاوه بر این، useFixedVolume
نیز باید روی false
تنظیم شود. برای جزئیات ، پرچم های AAOS پیکربندی صوتی را ببینید.
پیکربندی صوتی منطقه ساکن
در اندروید 11، car_audio_configuration.xml
دو فیلد جدید audioZoneId
و occupantZoneId
را معرفی کرد. می توانید از audioZoneId
برای کنترل مدیریت ناحیه صوتی استفاده کنید. می توانید از occupantZoneId
برای پیکربندی مسیریابی بر اساس شناسه کاربر استفاده کنید.
با مشاهده مجدد پیکربندی صدا، اما با استفاده از فیلد جدید برای شناسه منطقه ساکن و نگاشت شناسه منطقه صوتی، پیکربندی جدید بدون تعاریف گروه صدا را می توان به صورت زیر تنظیم کرد:
<audioZoneConfiguration version="2.0">
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
...
</zone>
<zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
...
</zone>
</zones>
</audioZoneConfiguration>
این پیکربندی یک نقشه برداری را برای منطقه اولیه به منطقه ساکن 0 و audioZoneId
1 به occupantZoneId
1 تعریف می کند. هر نقشه برداری بین منطقه ساکن و منطقه صوتی را می توان پیکربندی کرد. با این حال، نقشه برداری باید یک به یک باشد. قوانینی که دو فیلد جدید را تعریف می کنند عبارتند از:
audioZoneId
برای منطقه اصلی همیشه شناسهPRIMARY_AUDIO_ZONE
است. اگرisPrimary="true"
تعریف شده باشد،audioZoneId
مورد نیاز نیست.شماره های
audioZoneId
وoccupantZoneId
قابل تکرار نیستند.audioZoneId
وoccupantZoneId
فقط می توانند یک نگاشت یک به یک داشته باشند.
پیکربندی صدای ماشین اندروید 14
در اندروید 14، AAOS سرویس پلاگین OEM را معرفی کرد که به شما امکان میدهد رفتار صوتی را که توسط سرویس صوتی خودرو نظارت میشود، مدیریت کنید. به همراه خدمات افزونه جدید، تغییرات زیر به فایل تنظیمات صوتی خودرو اضافه می شود:
- زمینه صوتی خودرو تعریف شده توسط OEM
- تنظیمات پویا منطقه غیر اولیه
زمینه صوتی خودرو تعریف شده توسط OEM
برای فعال کردن یک پیکربندی صوتی انعطافپذیر، در Android 14، سرویس صوتی خودرو اجازه میدهد تا کاربردهای صوتی متفاوت از زمینههای صوتی ثابت تعریفشده گروهبندی شوند. این زمینه تعریف شده توسط OEM را می توان در فایل car_audio_configuration.xml
نسخه 3 تعریف کرد.
در عوض از زمینه های صوتی استاتیک از پیش تعریف شده استفاده می شود. قالب کلی زمینه صوتی خودرو تعریف شده توسط OEM بعدا نشان داده می شود.
زمینه های OEM هر یک به یک name
به همراه فهرستی از استفاده از ویژگی های صوتی که به زمینه اختصاص داده شده است نیاز دارند. در مثال قبلی، دو زمینه تعریف شده است:
<carAudioConfiguration version="3">
<oemContexts>
<oemContext name="media">
<audioAttributes>
<usage value="AUDIO_USAGE_MEDIA" />
<usage value="AUDIO_USAGE_UNKNOWN"/>
</audioAttributes>
</oemContext>
<oemContext name="game">
<audioAttributes>
<usage value="AUDIO_USAGE_GAME" />
</audioAttributes>
</oemContext>
...
- زمینه
media
شاملAUDIO_USAGE_MEDIA
وAUDIO_USAGE_UNKNOWN
است - زمینه
game
فقط شاملAUDIO_USAGE_GAME
است
متن باید در بالای فایل car_audio_configuration.xml
تعریف شود. وقتی زمینههای OEM تعریف میشوند، بقیه تنظیمات صوتی خودرو میتواند مانند قبل ادامه یابد. قوانین زیر در زمینه صوتی خودرو اعمال می شود:
تعاریف زمینه OEM اختیاری هستند. به جای آن از زمینه صوتی استاتیک استفاده می شود.
نام زمینه ها را تکرار نکنید.
استفاده از ویژگی صوتی را به چندین زمینه اختصاص ندهید.
تمام کاربردهای صوتی تعریف شده در
AudioAttributes
باید برای ساختن زمینه استفاده شود.
به بیان دقیق، نمایش رشته android.audio.policy.configuration.V7_0.AudioUsage
استفاده از صدا باید برای تعریف زمینه صوتی OEM استفاده شود. در آینده، استفادههای جدیدتر از ویژگیهای صوتی به مناسبترین زمینه برای کاهش خطا در حین انتقال از یک نسخه اندروید به نسخه دیگر اختصاص داده خواهد شد.
در حالی که زمینه تعریف شده توسط OEM برای گسترش بیشتر سرویس صوتی پلاگین OEM معرفی شد، هنوز هم می توان بدون سرویس پلاگین OEM از آن استفاده کرد. رفتار صوتی شبیه به خدمات صوتی استاتیک است:
تعاملات فوکوس صوتی ویژگی صوتی برای تعیین بهترین رفتار تطبیقی که توسط ماتریس تعامل فوکوس صوتی تنظیم شده است استفاده می شود. برای جزئیات، به فوکوس صوتی مراجعه کنید.
ویژگی صوتی کنترل حجم صدا برای تعیین بهترین تطابق استفاده می شود:
- گروه حجم بر اساس زمینه تعریف شده توسط OEM.
- اولویت از لیست حجم ثابت پیکربندی شده است.
رفتار پخش صدا:
استفاده از ویژگی صوتی برای فوکوس صوتی فعلی برای نگاشت اطلاعات دستگاه صوتی خروجی همانطور که در فایل پیکربندی صدای خودرو تعریف شده است استفاده می شود.
ویژگی صوتی برای نگاشت زمینه استاتیک مربوطه به اردک، بر اساس ماتریس ducking صوتی استاتیک استفاده می شود.
استراتژی های محصول موتور CAP
وقتی دستگاهی باید از موتور CAP برای مدیریت حجم یا مسیریابی استفاده کند، زمینه تعریف شده توسط OEM شما باید با تعریف استراتژی محصول موتور CAP مطابقت داشته باشد. اگر نه، میتوانید از زمینه تعریفشده OEM بدون موتور CAP استفاده کنید.
برای کسب اطلاعات بیشتر، استراتژی محصول موتور CAP را در AAOS ببینید.
تنظیمات نواحی صوتی پویا
در Android 14، برای تطبیق با پیکربندی مناطق صوتی پویا، طرح پیکربندی صدای خودرو برای تعریف مناطق صوتی نیز به نسخه 3 بهروزرسانی میشود. طرح جدید نیاز به تنظیم پیکربندی برای هر منطقه دارد.
<carAudioConfiguration version="3">
<!-- optional OEM context -->
<oemContexts>
<oemContext name="media">
<audioAttributes>
<usage value="AUDIO_USAGE_MEDIA" />
<usage value="AUDIO_USAGE_UNKNOWN"/>
</audioAttributes>
</oemContext>
<oemContext name="game">
<audioAttributes>
<usage value="AUDIO_USAGE_GAME" />
</audioAttributes>
</oemContext>
...
</oemContexts>
<zones>
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="primary zone config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="media"/>
<context context="game"/>
<context context="announcement"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
...
</zoneConfigs>
</zone
</zones>
برای کسب اطلاعات بیشتر، فایل نسخه 3 تعریف شده در device/generic/car/emulator/audio/car_audio_configuration.xml
ببینید. با شروع در Android 14، منطقه اولیه می تواند تنها یک (1) پیکربندی داشته باشد. مناطق غیر اولیه می توانند چندین پیکربندی داشته باشند. قوانین زیر برای تنظیمات صوتی خودرو اعمال می شود:
منطقه صوتی اولیه فقط می تواند یک پیکربندی داشته باشد.
مناطق صوتی غیراصلی می توانند چندین پیکربندی داشته باشند.
نام باید برای هر منطقه صوتی و پیکربندی منطقه صوتی منحصر به فرد باشد.
در یک منطقه صوتی، تنظیمات صدا ممکن است متفاوت باشد:
- تنظیم گروه های حجمی نباید یکسان باشد.
- تخصیص زمینه صوتی لازم نیست یکسان باشد.
نام دستگاه های خروجی صدا باید در مناطق یا پیکربندی ها منحصر به فرد باشد. نام دستگاه باید فقط یک بار در یک پیکربندی صوتی یا مناطق ظاهر شود.
دستگاههای صوتی متعلق به یک گروه صدا باید پیکربندیهای افزایش صدا یکسانی داشته باشند.
همه زمینه های صوتی (OEM یا استاتیک) باید برای هر پیکربندی صوتی اختصاص داده شوند.
سازگاری رو به جلو
اگرچه نسخههای جدید car_audio_configuration.xml
ویژگیهای جدیدی را در هر بهروزرسانی معرفی میکنند، همچنان میتوانید از فایلهای قدیمیتر در نسخههای جدیدتر AAOS استفاده کنید. OEM هایی که به نسخه های جدید Android به روز می شوند می توانند دوباره از فایل car_audio_configuration.xml
استفاده کنند.
برای استفاده از یک ویژگی جدید که به اطلاعات جدید موجود در car_audio_configuration.xml
نیاز دارد، نسخه باید به روز شود. تلاش برای استفاده از نسخه قدیمیتر یک فایل با اطلاعاتی که در آن نسخه فایل پشتیبانی نمیشود، هنگام شروع سرویس خودرو، یک IllegalStateException
ایجاد میکند. پیام استثنا حاوی اطلاعات مربوطه در مورد اطلاعات مورد استفاده و حداقل نسخه مورد نیاز است.