في الإصدار 10 من نظام التشغيل Android، تم استبدال 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
في ملف تعريف ملف car_audio_configuration.xml
لتحديد إعدادات ملف car_audio_configuration.xml
.
مناطق الصوت في السيارة:
- تحتوي كل منطقة صوتية على معرّف فريد لمنطقة الصوت.
- يمكن ربط كل منطقة صوتية بمنطقة ركاب.
تكون إجراءات الصوت في كل منطقة مستقلة عن بعضها:
- التركيز على الصوت
- توجيه الصوت
- تجنب التداخل مع أصوات أخرى
مجموعات مستوى الصوت في السيارة:
يتم التحكّم في جميع أجهزة الصوت التي تحتوي على مجموعة مستويات صوت معًا باستخدام التغييرات نفسها في مستوى الصوت. يجب أن تكون إعدادات مستوى الصوت لجميع الأجهزة في مجموعة واحدة متطابقة.
ربط سياق الصوت بالأجهزة الصوتية استخدِم هذه الميزة لإنشاء ملف صوتي مجمّع يربط استخدامات الصوت بجهاز إخراج.
يجب تمثيل جميع السياقات الصوتية ضمن منطقة. يتيح ذلك إعداد توجيه الصوت بدقة لجميع استخدامات سمة الصوت.
السياقات الصوتية
لتبسيط ضبط الصوت في AAOS، تم تجميع الاستخدامات المشابهة
في CarAudioContexts
. يتم استخدام سياقات الصوت هذه في
CarAudioService
لتحديد عمليات التوجيه ومجموعات الصوت وتركيز الصوت وإدارة
خفض الصوت. في ما يلي سياقات الصوت الثابتة في AAOS.
يصف هذا الجدول التعيين بين السياقات الصوتية وحالات الاستخدام. يتم عرض الصفوف المميّزة للاستخدام الجديد للنظام.
CarAudioContext | Associated AttributeUsages |
---|---|
موسيقى | UNKNOWN GAME |
التنقّل | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
CALL_RING | NOTIFICATION_RINGTONE |
اتصال | VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARM | 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
.
نموذج الضبط (الإصدار 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
لتطبيقها على إخراج هذه الأجهزة.
بالنسبة إلى المنطقة الأساسية، ننصحك بأن تكون أصوات النظام منفصلة عن الأصوات الأخرى. ويسمح ذلك بمعالجة أصوات المركبات بأولوية أعلى. تُجري خدمة الصوت في السيارة هذه الاختلافات في أصوات المركبات من حيث إدارة التركيز والتجاهل. على سبيل المثال، يكون لطلب تركيز الصوت في حالات الطوارئ أولوية أعلى من طلب تركيز آخر.
لتبسيط الأمور، في مثال المنطقة الثانوية، يتم توجيه جميع سياقات الصوت إلى جهاز واحد ومجموعة مستوى صوت واحدة.
ضبط الصوت في منطقة الركاب
في 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
id دائمًا. إذا تم تحديد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
إلى آخر.
على الرغم من أنّه تم تقديم السياق الذي يحدّده المصنّع الأصلي للجهاز لتوسيع نطاق خدمة المكوّن الإضافي للصوت من المصنّع الأصلي للجهاز، لا يزال بإمكانك استخدامه بدون خدمة المكوّن الإضافي من المصنّع الأصلي للجهاز. يشبه سلوك المحتوى الصوتي سلوك خدمة المحتوى الصوتي الثابت:
التفاعلات مع ميزة "التركيز على الصوت" تُستخدَم سمة الصوت لتحديد أفضل سلوكٍ لل مطابقة كما تم إعداده من خلال مصفوفة تفاعل تركيز الصوت. للاطّلاع على التفاصيل، يُرجى الاطّلاع على مقالة أولوية الصوت.
تُستخدَم سمة التحكّم في مستوى الصوت لتحديد أفضل مطابقة:
- مجموعة مجلدات استنادًا إلى السياق الذي يحدّده المصنّع الأصلي للجهاز
- الأولوية من قائمة الوحدات الثابتة التي تم ضبطها
سلوك ميزة "تجنُّب التداخل مع أصوات أخرى":
يتم استخدام سمة الصوت لتركيز الصوت الحالي لربطه بمعلومات جهاز الصوت المُصدِر كما هو محدّد فيملف إعدادات الصوت في السيارة.
تُستخدَم سمة الصوت لربط السياق الثابت المقابل بخفض الصوت، استنادًا إلى مصفوفة خفض الصوت الثابت.
إعدادات مناطق الصوت الديناميكية
في 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
عند بدء خدمة السيارة. تحتوي رسالة المحاولة التالية على المعلومات ذات الصلة بالمعلومات المستخدَمة والحد الأدنى للإصدار المطلوب.