في نظام التشغيل 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 |
UNKNOWNGAMEMEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATIONVOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATIONNOTIFICATION_* |
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 OS إلى السلوك التلقائي لـ 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 تجميع استخدامات الصوت بشكل مختلف عن سياقات الصوت الثابتة المحدّدة.
يمكن تحديد سياق المصنّع الأصلي للجهاز هذا في ملف 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، يمكن أن تتضمّن المنطقة الأساسية إعدادًا واحدًا فقط. يمكن أن تحتوي المناطق غير الأساسية على إعدادات متعدّدة. تنطبق القواعد التالية على عمليات ضبط الصوت في السيارة:
يمكن أن تتضمّن منطقة الصوت الأساسية إعدادًا واحدًا فقط.
يمكن أن تتضمّن مناطق الصوت غير الأساسية إعدادات متعدّدة.
يجب أن يكون الاسم فريدًا لكل منطقة صوتية وإعدادات منطقة صوتية.
داخل منطقة صوتية، قد تختلف إعدادات الصوت:
- ليس من الضروري أن يكون إعداد مجموعات الصوت هو نفسه.
- ليس من الضروري أن يكون تعيين سياق الصوت هو نفسه.
يجب أن تكون أسماء مصادر إخراج الصوت فريدة في جميع المناطق أو الإعدادات. يجب أن يظهر اسم الجهاز مرة واحدة فقط في إعدادات الصوت أو المناطق.
يجب أن تتضمّن الأجهزة الصوتية التي تنتمي إلى مجموعة مستوى الصوت نفسها إعدادات كسب الصوت نفسها.
يجب تحديد جميع سياقات الصوت (الخاصة بالشركة المصنّعة للمعدات الأصلية أو الثابتة) لكل إعداد صوت.
التوافق مع الإصدارات الأحدث
على الرغم من أنّ الإصدارات الجديدة من car_audio_configuration.xml تتضمّن ميزات جديدة في كل تحديث، سيظل بإمكانك استخدام الملفات القديمة في الإصدارات الأحدث من AAOS. يمكن لمصنّعي المعدات الأصلية الذين يحدّثون إلى إصدارات جديدة من Android إعادة استخدام ملف car_audio_configuration.xml.
لاستخدام ميزة جديدة تتطلّب معلومات جديدة مضمّنة في car_audio_configuration.xml، يجب تحديث الإصدار. عند محاولة استخدام إصدار قديم من ملف يتضمّن معلومات غير متوافقة مع إصدار الملف هذا، سيظهر الخطأ IllegalStateException عند بدء خدمة السيارة. تحتوي رسالة الاستثناء على المعلومات ذات الصلة بشأن المعلومات المستخدَمة والحد الأدنى للإصدار المطلوب.