در 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 | کاربردهای ویژگی مرتبط |
---|---|
موسیقی | UNKNOWN GAME |
ناوبری | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
CALL_RING | NOTIFICATION_RINGTONE |
تماس بگیرید | VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
آلارم | ALARM |
اطلاع رسانی | NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
اورژانس | EMERGENCY |
ایمنی | SAFETY |
VEHICLE_STATUS | VEHICLE_STATUS |
اعلان | ANNOUNCEMENT |
مسیریابی AAOS را فعال کنید
برای استفاده از مسیریابی مبتنی بر AAOS، باید پرچم audioUseDynamicRouting
را روی true
تنظیم کنید:
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
هنگامی که false
، مسیریابی و بسیاری از CarAudioService
غیرفعال می شود و AAOS به رفتار پیش فرض AudioService
برمی گردد.
منطقه اولیه
به طور پیش فرض، تمام صداها به منطقه اصلی هدایت می شوند. فقط یک ناحیه اصلی وجود دارد که در پیکربندی با ویژگی 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 منتقل میشود تا در خروجی این دستگاهها اعمال شود.
برای منطقه اولیه، توصیه می کنیم که صداهای سیستم جدا از صداهای دیگر باشد. این اجازه می دهد تا صداهای خودرو با اولویت بالاتری برخورد شود. سرویس صوتی خودرو در حال حاضر این تمایزها را برای صداهای خودرو از نظر فوکوس و مدیریت اردک ایجاد کرده است. به عنوان مثال، یک درخواست فوکوس صدای اضطراری اولویت بیشتری نسبت به درخواست فوکوس دیگر دارد.
برای ساده نگه داشتن کارها، در مثال منطقه ثانویه، همه زمینه های صوتی به یک دستگاه واحد و یک گروه حجمی هدایت می شوند.
پیکربندی صوتی منطقه ساکن
در اندروید 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 صوتی استاتیک استفاده می شود.
تنظیمات نواحی صوتی پویا
در 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
ایجاد میکند. پیام استثنا حاوی اطلاعات مربوطه در مورد اطلاعات مورد استفاده و حداقل نسخه مورد نیاز است.