في 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
لتحديد التوجيه ومجموعات الصوت والتركيز الصوتي وإدارة الابتعاد. سياقات الصوت الثابتة في AAOS مدرجة أدناه.
يصف هذا الجدول التعيين بين السياقات الصوتية والاستخدامات. يتم توفير الصفوف المميزة لاستخدام النظام الجديد.
CarAudioContext | استخدامات السمات المرتبطة |
---|---|
موسيقى | UNKNOWN GAME |
ملاحة | ASSISTANCE_NAVIGATION_GUIDANCE |
أمر صوتي | ASSISTANT |
اتصل بالرنين | 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
.
تكوين العينة (الإصدار 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 لتطبيقها على مخرجات هذه الأجهزة.
بالنسبة للمنطقة الأساسية، نوصي بفصل أصوات النظام عن الأصوات الأخرى. وهذا يسمح بمعالجة أصوات المركبات بأولوية أعلى. تعمل خدمة الصوت في السيارة بالفعل على التمييز بين أصوات السيارة من حيث التركيز وإدارة الابتعاد. على سبيل المثال، يتمتع طلب التركيز الصوتي في حالات الطوارئ بأولوية أعلى من طلب التركيز الآخر.
لتبسيط الأمور، في مثال المنطقة الثانوية، يتم توجيه كافة السياقات الصوتية إلى جهاز واحد ومجموعة صوتية واحدة.
تكوين الصوت في المنطقة المحتلة
في 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 خدمة المكونات الإضافية لـ OEM، والتي تتيح لك إدارة السلوك الصوتي الذي تشرف عليه خدمة الصوت في السيارة بشكل أكثر نشاطًا. إلى جانب خدمات المكونات الإضافية الجديدة، تتم إضافة التغييرات التالية إلى ملف تكوين الصوت في السيارة:
- سياق صوت السيارة المحدد من قبل OEM
- التكوينات الديناميكية للمنطقة غير الأولية
السياق الصوتي للسيارة المحدد من قبل OEM
لتمكين تكوين صوتي مرن، في Android 14، تسمح خدمة الصوت في السيارة بتجميع استخدامات الصوت بشكل مختلف عن سياقات الصوت الثابتة المحددة أعلاه. يمكن تعريف هذا السياق المعرف من قبل OEM في ملف الإصدار 3 car_audio_configuration.xml
.
وبدلاً من ذلك يتم استخدام سياقات الصوت الثابتة المحددة حاليًا. يظهر أدناه التنسيق العام للسياق الصوتي للسيارة المحدد بواسطة 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. في المستقبل، سيتم تعيين استخدامات سمات الصوت الأحدث إلى السياق الأكثر ملاءمة لتقليل الأخطاء أثناء الترحيل من إصدار Android إلى آخر.
في حين تم تقديم السياق المحدد من قبل OEM لتوسيع خدمة الصوت الإضافية لـ OEM، إلا أنه لا يزال من الممكن استخدامه بدون خدمة المكونات الإضافية لـ OEM. يشبه سلوك الصوت سلوك خدمة الصوت الثابتة:
تفاعلات التركيز الصوتي. يتم استخدام سمة الصوت لتحديد أفضل سلوك مطابق كما تم إعداده بواسطة مصفوفة تفاعل التركيز الصوتي. للحصول على التفاصيل، راجع التركيز الصوتي .
يتم استخدام سمة الصوت للتحكم في مستوى الصوت لتحديد أفضل مطابقة:
- مجموعة وحدات التخزين بناءً على السياق المحدد من قبل OEM.
- تم تكوين الأولوية من قائمة وحدات التخزين الثابتة.
سلوك التغاضي عن الصوت:
يُستخدم استخدام سمة الصوت لتركيز الصوت الحالي لتعيين معلومات جهاز إخراج الصوت كما هو محدد في ملف تكوين صوت السيارة.
يتم استخدام سمة الصوت لتعيين السياق الثابت المقابل للبط، بناءً على مصفوفة تهرب الصوت الثابتة.
تكوينات مناطق الصوت الديناميكية
في 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. يمكن لمصنعي المعدات الأصلية الذين يقومون بالتحديث إلى الإصدارات الجديدة من Android إعادة استخدام ملف car_audio_configuration.xml
.
لاستخدام ميزة جديدة تتطلب معلومات جديدة مضمنة في car_audio_configuration.xml
، يجب تحديث الإصدار. تؤدي محاولة استخدام إصدار أقدم من ملف يحتوي على معلومات غير مدعومة في إصدار الملف هذا إلى حدوث IllegalStateException
عند بدء تشغيل خدمة السيارة. تحتوي رسالة الاستثناء على المعلومات ذات الصلة حول المعلومات المستخدمة والحد الأدنى للإصدار المطلوب.