في نظام التشغيل Android 10، تم استبدال car_volumes_groups.xml
وIAudioControl.getBusForContext
بـ car_audio_configuration.xml
. تمثّل ملفات سياسات الصوت، التي يتم تضمينها عادةً في قسم المورّد، إعدادات أجهزة الصوت على اللوحة. يجب تحديد جميع الأجهزة المشار إليها في car_audio_configuration.xml
ضمن audio_policy_configuration.xml
.
يوضّح الشكل 1 نظرة عامة على بنية خدمة الصوت في السيارة، حيث تقرأ خدمة الصوت في السيارة ملف إعدادات الصوت في السيارة لإعداد الصوت للجهاز.
الشكل 1. نظرة عامة على بنية نظام الصوت في السيارة
ضَع ملف إعدادات الصوت في السيارة في vendor/etc/
أو
system/etc/
على الجهاز، مع العلم أنّ خدمة الصوت في السيارة تبحث عن الملف أولاً في vendor/etc/
. تقرأ خدمات الصوت في السيارة القيمة 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
، ويعود نظام التشغيل Android Automotive إلى السلوك التلقائي لـ AudioService
.
محرك سياسات الصوت القابل للضبط
لتعزيز إدارة الصوت في السيارة في نظام التشغيل Android 14، قدّمت AAOS إمكانية إدارة الصوت من خلال محرك سياسات الصوت القابل للضبط (CAP). يوفّر ذلك مرونة أكبر للتحكّم في توجيه الصوت وإدارة مستوى الصوت، كما يتيح تحديد ما يلي:
يمكنك تفعيل محرّك "سياسة الصوت القابلة للضبط" (CAP) من خلال استخدام useCoreAudioVolume
وuseCoreAudioRouting
، راجِع محرّك "سياسة الصوت القابلة للضبط" لمزيد من التفاصيل.
المنطقة الأساسية
يتم توجيه كل الصوت إلى المنطقة الأساسية تلقائيًا. لا يتوفّر سوى منطقة أساسية واحدة، ويتم تحديدها في الإعدادات من خلال السمة isPrimary="true"
. يتم تلقائيًا تعيين
Audiomanager.PRIMARY_AUDIO_ZONE
للمنطقة الأساسية.
مثال على الإعداد (الإصدار 2)
على سبيل المثال، قد تحتوي المركبة على منطقتَين، منطقة أساسية ونظام ترفيه في المقعد الخلفي. في هذا السيناريو، يمكنك تصميم إصدار 2 محتمل على النحو التالي:car_audio_configuration.xml
<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 خدمة المكوّن الإضافي من الشركة المصنّعة للجهاز الأصلي، والتي تتيح لك إدارة سلوك الصوت الذي تشرف عليه خدمة الصوت في السيارة. بالإضافة إلى خدمات المكوّن الإضافي الجديدة، تمّت إضافة التغييرات التالية إلى ملف إعدادات الصوت في السيارة:
- سياق الصوت في السيارة الذي يحدّده المصنّع الأصلي
- الإعدادات الديناميكية للمنطقة غير الأساسية
سياق الصوت في السيارة الذي يحدّده المصنّع الأصلي
لتفعيل إعدادات صوت مرنة، تتيح خدمة الصوت في Android 14 تجميع استخدامات الصوت بشكل مختلف عن سياقات الصوت الثابتة المحدّدة.
يمكن تحديد سياق المصنّع الأصلي للجهاز هذا في ملف الإصدار 3 من car_audio_configuration.xml
.
بدلاً من ذلك، يتم استخدام سياقات الصوت الثابتة المحدّدة مسبقًا. سيتم عرض التنسيق العام لسياق صوت السيارة الذي يحدّده مصنّع المعدات الأصلية لاحقًا.
تتطلّب سياقات المصنّع الأصلي للجهاز (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
. بعد تحديد سياقات المصنّع الأصلي للجهاز، يمكن مواصلة بقية إعدادات الصوت في السيارة كما كان من قبل. تنطبق القواعد التالية على سياق الصوت في السيارة:
تعريفات سياق المصنّع الأصلي للجهاز اختيارية. بدلاً من ذلك، يتم استخدام سياق الصوت الثابت.
لا تكرّر أسماء السياقات.
لا تُعيِّن استخدام سمة الصوت إلى سياقات متعدّدة.
يجب استخدام جميع حالات استخدام الصوت المحدّدة في
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، يمكن أن يتضمّن النطاق الأساسي عملية إعداد واحدة فقط. يمكن أن تحتوي المناطق غير الأساسية على إعدادات متعدّدة. تنطبق القواعد التالية على عمليات ضبط الصوت في السيارة:
يمكن أن تتضمّن منطقة الصوت الأساسية إعدادًا واحدًا فقط.
يمكن أن تتضمّن مناطق الصوت غير الأساسية إعدادات متعدّدة.
يجب أن يكون الاسم فريدًا لكل منطقة صوتية وإعدادات منطقة صوتية.
داخل منطقة صوتية، قد تختلف إعدادات الصوت:
- ليس من الضروري أن يكون إعداد مجموعات وحدات التخزين هو نفسه.
- ليس من الضروري أن يكون تعيين سياق الصوت هو نفسه.
يجب أن تكون أسماء أجهزة إخراج الصوت فريدة في جميع المناطق أو الإعدادات. يجب أن يظهر اسم الجهاز مرة واحدة فقط في إعدادات الصوت أو المناطق.
يجب أن تتضمّن الأجهزة الصوتية التي تنتمي إلى مجموعة مستوى الصوت نفسها إعدادات كسب الصوت نفسها.
يجب تحديد جميع سياقات الصوت (الخاصة بمصنّع المعدات الأصلية أو الثابتة) لكل إعداد صوت.
التوافق مع الإصدارات الأحدث
على الرغم من أنّ الإصدارات الجديدة من car_audio_configuration.xml
تتضمّن ميزات جديدة في كل تحديث، سيظل بإمكانك استخدام الملفات القديمة في الإصدارات الأحدث من AAOS. يمكن لمصنّعي المعدات الأصلية الذين يحدّثون إلى إصدارات جديدة من Android إعادة استخدام ملف car_audio_configuration.xml
.
لاستخدام ميزة جديدة تتطلّب معلومات جديدة مضمّنة في car_audio_configuration.xml
، يجب تحديث الإصدار. محاولة استخدام إصدار قديم من ملف يتضمّن معلومات غير متوافقة مع إصدار الملف هذا تؤدي إلى ظهور الخطأ IllegalStateException
عند بدء تشغيل خدمة السيارة. تحتوي رسالة الخطأ على المعلومات ذات الصلة بشأن المعلومات المستخدَمة والحد الأدنى المطلوب من الإصدار.