في Android 10، تم استبدال car_audio_configuration.xml
car_volumes_groups.xml
وIAudioControl.getBusForContext
. تمثّل ملفات سياسة الصوت
، التي تكون عادةً مضمّنة في قسم المورّد، إعدادات تجهيزات الصوت
في اللوحة. يجب تحديد جميع الأجهزة المُشار إليها في
car_audio_configuration.xml
في
audio_policy_configuration.xml
.
يوضّح الشكل 1 نظرة عامة على بنية خدمة الصوت في السيارة التي تقرأ ملف ملف برمجة الصوت في السيارة لإعداد الصوت في الجهاز.
الشكل 1: نظرة عامة على بنية نظام الصوت في السيارة
ضَع ملف ضبط الصوت في السيارة في vendor\etc\` or
system\etc` على الجهاز، مع vendor\etc\`
being the first place searched for the file by the car audio service. The car
audio services reads
car_audio_configuration.xml` لتحديد إعدادات
الصوت.
مناطق الصوت في السيارة:
- تحتوي كل منطقة صوتية على معرّف فريد لمنطقة الصوت.
- يمكن ربط كل منطقة صوتية بمنطقة ركاب.
تكون إجراءات الصوت في كل منطقة مستقلة عن بعضها:
- التركيز على الصوت
- توجيه الصوت
- تجنب التداخل مع أصوات أخرى
مجموعات مستوى الصوت في السيارة:
يتم التحكّم في جميع أجهزة الصوت التي تحتوي على مجموعة مستوى صوت معًا باستخدام التغييرات نفسها في مستوى الصوت. يجب أن تكون إعدادات مستوى الصوت لجميع الأجهزة في مجموعة واحدة متطابقة.
ربط سياق الصوت بالأجهزة الصوتية استخدِم هذه الميزة لإنشاء ملف صوتي مجمّع يربط استخدامات الصوت بجهاز إخراج.
يجب تمثيل جميع السياقات الصوتية ضمن منطقة. يتيح ذلك إعداد توجيه الصوت بدقة لجميع استخدامات سمة الصوت.
السياقات الصوتية
لتبسيط عملية ضبط الصوت في AAOS، تم تجميع الاستخدامات المشابهة
في CarAudioContexts
. يتم استخدام سياقات الصوت هذه في
CarAudioService
لتحديد عمليات التوجيه ومجموعات الصوت وتركيز الصوت وإدارة كتم الصوت. في هذا الجدول، يتم إدراج سياقات الصوت الثابتة في AAOS.
يصف هذا الجدول التعيين بين السياقات الصوتية وحالات الاستخدام. يتم عرض الصفوف التي تم تمييزها للاستخدام الجديد للنظام.
CarAudioContext | Associated AttributeUsages |
---|---|
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
.
محرّك قابل للضبط لسياسة الصوت
لتوسيع نطاق إدارة الصوت في السيارة في Android 14، وفّرت AAOS إمكانية استخدام إدارة الصوت من خلال محرك سياسة الصوت القابل للضبط (CAP). يوفّر ذلك مرونة أكبر للتحكّم في توجيه الصوت وإدارة الحجم ويوفّر تعريفًا متنوعًا لما يلي:
يمكنك تفعيل محرّك سياسة الصوت القابلة للضبط (CAP) من خلال استخدام useCoreAudioVolume
وuseCoreAudioRouting
، اطّلِع على محرّك سياسة الصوت القابلة للضبط للحصول على التفاصيل.
المنطقة الأساسية
يتم توجيه كل المحتوى الصوتي تلقائيًا إلى المنطقة الأساسية. تتوفّر منطقة أساسية واحدة فقط
، ويتم الإشارة إليها في الإعدادات باستخدام السمة
isPrimary="true"
. يتم تلقائيًا منح المنطقة الأساسية الرمز
Audiomanager.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 للحصول على التفاصيل.
ضبط الصوت في منطقة الركاب
في Android 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
سوى عملية تعيين واحدة لواحد.
ضبط إعدادات الصوت في السيارة على Android 14
في Android 14، طرح نظام التشغيل AAOS خدمة المكوّن الإضافي لمصنعي المعدّات الأصلية، التي تتيح لك إدارة سلوك الصوت الذي تتحكّم فيه خدمة الصوت في السيارة. بالإضافة إلى خدمات المكوّنات الإضافية الجديدة، تتم إضافة التغييرات التالية إلى ملف إعدادات الصوت في السيارة:
- سياق الصوت في السيارة الذي يحدّده المصنّع الأصلي
- الإعدادات الديناميكية للمنطقة غير الأساسية
سياق الصوت في السيارة الذي يحدّده المصنّع الأصلي
لتفعيل إعدادات صوتية مرنة، في الإصدار
14 من Android، تسمح خدمة الصوت في السيارة بتجميع استخدامات الصوت
بشكل مختلف عن سياقات الصوت الثابتة المحدّدة.
يمكن تحديد هذا السياق الذي يحدّده المصنّع الأصلي للجهاز في ملف car_audio_configuration.xml
الإصدار 3.
بدلاً من ذلك، يتم استخدام السياقات الصوتية الثابتة المحدّدة مسبقًا. يتم عرض التنسيق العام لسياق الصوت في السيارة الذي يحدّده المصنّع الأصلي للجهاز لاحقًا.
تتطلّب سياقات المصنّعين الأصليّين للأجهزة كلّ 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
الملف. عند تحديد سياقات المصنّع الأصلي للسيارة، يمكن مواصلة ضبط إعدادات الصوت في السيارة
كما في السابق. تنطبق القواعد التالية على سياق الصوت في السيارة:
إنّ تعريفات سياق المصنّع الأصلي للجهاز اختيارية. يتم بدلاً من ذلك استخدام سياق الصوت الثابت.
لا تكرِّر أسماء السياقات.
لا تُحدِّد استخدام سمة الصوت لسياقات متعدّدة.
يجب استخدام جميع استخدامات الصوت المحدّدة في
AudioAttributes
لإنشاء السياق.
بشكلٍ دقيق، يجب استخدام android.audio.policy.configuration.V7_0.AudioUsage
تمثيل السلسلة لاستخدام الصوت لتعريف
سياق الصوت لدى المصنّع الأصلي للجهاز. في المستقبل، سيتمّ إسناد استخدامات سمة الصوت الجديدة إلى السياق
الأكثر ملاءمةً لتقليل الأخطاء أثناء نقل البيانات من إصدار Android
إلى آخر.
على الرغم من أنّه تم تقديم السياق الذي يحدّده المصنّع الأصلي للجهاز لتوسيع نطاق خدمة المكوّن الإضافي للصوت من المصنّع الأصلي للجهاز، لا يزال بإمكانك استخدامه بدون خدمة المكوّن الإضافي من المصنّع الأصلي للجهاز. يشبه سلوك المحتوى الصوتي سلوك خدمة المحتوى الصوتي الثابت:
التفاعلات مع ميزة "التركيز على الصوت" تُستخدَم سمة الصوت لتحديد أفضل سلوكٍ لل مطابقة كما تم إعداده من خلال مصفوفة تفاعل تركيز الصوت. للاطّلاع على التفاصيل، يُرجى الاطّلاع على مقالة التركيز على الصوت.
تُستخدَم سمة التحكّم في مستوى الصوت لتحديد أفضل مطابقة:
- مجموعة مجلدات استنادًا إلى السياق الذي يحدّده المصنّع الأصلي للجهاز
- الأولوية من قائمة الوحدات الثابتة التي تم ضبطها
سلوك ميزة "تجنُّب التداخل مع أصوات أخرى":
يتم استخدام سمة الصوت لتركيز الصوت الحالي لربطه بمعلومات جهاز الصوت المُصدِر كما هو محدّد فيملف إعدادات الصوت في السيارة.
تُستخدَم سمة الصوت لربط السياق الثابت المقابل بخفض الصوت، استنادًا إلى مصفوفة خفض الصوت الثابت.
استراتيجيات منتجات محرّك CAP
عندما يجب أن يستخدم الجهاز محرّك CAP لإدارة مستوى الصوت أو التوجيه، يجب أن يتطابق السياق الذي حدّده المصنّع الأصلي للجهاز مع تعريف استراتيجية المنتج في محرّك CAP. وإذا لم يكن الأمر كذلك، يمكنك استخدام السياق الذي يحدّده المصنّع الأصلي للجهاز بدون محرّك 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) فقط. يمكن أن تتضمّن المناطق غير الأساسية إعدادات متعدّدة. تنطبق القواعد التالية
على إعدادات الصوت في السيارة:
يمكن أن تحتوي منطقة الصوت الأساسية على إعداد واحد فقط.
يمكن أن تتضمّن مناطق الصوت غير الأساسية إعدادات متعددة.
يجب أن يكون الاسم فريدًا لكل منطقة صوتية وإعدادات منطقة صوتية.
ضمن منطقة صوتية، قد تختلف إعدادات الصوت:
- ولا يلزم أن يكون إعداد مجموعات الوحدات الصوتية متطابقًا.
- ولا يلزم أن يكون تحديد سياق الصوت هو نفسه.
يجب أن تكون أسماء أجهزة إخراج الصوت فريدة في جميع المناطق أو الإعدادات. يجب أن يظهر اسم الجهاز مرة واحدة فقط في إعدادات الصوت أو المناطق.
يجب أن تتضمّن أجهزة الصوت التي تنتمي إلى مجموعة مستوى الصوت نفسها إعدادات معالجة الصوت نفسها.
يجب تحديد جميع سياقات الصوت (التابعة لجهة التصنيع أو الثابتة) لكل إعداد صوتي.
التوافق مع الإصدارات المستقبلية
على الرغم من أنّ الإصدارات الجديدة من car_audio_configuration.xml
توفّر ميزات
جديدة في كل تحديث، سيظل بإمكانك استخدام الملفات القديمة في الإصدارات الأحدث من
AAOS. يمكن لمصنّعي الأجهزة الأصليين الذين يُجريون تحديثات إلى إصدارات جديدة من Android إعادة استخدام ملف
car_audio_configuration.xml
.
لاستخدام ميزة جديدة تتطلّب معلومات جديدة مضمّنة في ملف car_audio_configuration.xml
، يجب تحديث الإصدار. يؤدي محاولة استخدام
إصدار قديم من ملف يحتوي على معلومات غير متوافقة مع هذا الإصدار من الملف
إلى ظهور IllegalStateException
عند بدء خدمة السيارة. تحتوي رسالة المحاولة التالية على المعلومات ذات الصلة بالمعلومات المستخدَمة والحد الأدنى للإصدار المطلوب.