تم تضمين ميزة إدارة الحجم في CarAudioService
، والتي تستخدم مجلدات ثابتة.
مع توقع أن يتم تطبيق مستويات الصوت أسفل HAL بواسطة جهاز
مكبّر الصوت بدلاً من مكبّر الصوت المتوفّر في البرنامج. ينظّم "CarAudioService
" أجهزة إخراج الصوت
إلى مجموعات صوتية لتطبيق هذه المكاسب نفسها على جميع الأجهزة المرتبطة
مجموعة مستوى الصوت.
أحجام ثابتة
تستخدم عمليات تنفيذ نظام التشغيل Android Automotive مكبّر صوت للأجهزة للتحكم في مستوى الصوت بدلاً من
برنامج مزج البرامج. لتجنّب الآثار الجانبية، اضبط العلامة config_useFixedVolume
على
true
(التراكب حسب الضرورة):
<resources>
<!-- Car uses hardware amplifier for volume. -->
<bool name="config_useFixedVolume">true</bool>
</resources>
في حال عدم ضبط علامة config_useFixedVolume
(أو ضبطها على false
):
يمكن للتطبيقات الاتصال بـ AudioManager.setStreamVolume()
لتغيير مستوى الصوت حسب البث
اكتب في برنامج مزج البرامج. قد لا يكون هذا أمرًا مرغوبًا فيه دائمًا بسبب
في التطبيقات الأخرى وحقيقة أن تخفيف مستوى الصوت في برنامج مزج البرامج
إلى تقليل عدد وحدات البت المهمة في الإشارة عند تلقّيها من خلال
مضخم الأجهزة.
مجموعات مستويات الصوت
تدير مجموعات مستوى الصوت مستويات الصوت لمجموعة من الأجهزة ضمن ملف صوتي. المنطقة. يمكن التحكّم في مستوى الصوت بشكل مستقل لكل مجموعة مستوى صوت. تشير رسالة الأشكال البيانية يتم ضبط الأرباح الناتجة على الأجهزة المرتبطة ليتم تطبيقها من خلال مكبّر الصوت الخاص بالمركبة. يتم الاحتفاظ بإعدادات مستوى الصوت للمستخدم ويتم تحميلها. عندما يسجِّل المستخدم دخوله.
تحديد مجموعات الحجم
تستخدم CarAudioService مجموعات مستوى الصوت المحددة في car_audio_configuration.xml
:
<audioZoneConfiguration version="2.0">
<zones>
<zone name="primary zone" isPrimary="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="music"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
...
</volumeGroups>
</zone>
</zones>
</audioZoneConfiguration>
يجب أن تحتوي كل مجموعة مستويات صوت على جهاز إخراج واحد أو أكثر مرتبطين
. يجب أن تتوافق العناوين مع أجهزة الإخراج المحددة في
audio_policy_configuration.xml
ضبط مكاسب مجموعات الحجم
تشتمل كل مجموعة من مجموعات مستويات الصوت على قيم حد أدنى وحد أقصى وتلقائي لمستوى الاكتساب، بالإضافة إلى
حجم الخطوة استنادًا إلى القيم التي تم ضبطها في audio_policy_configuration.xml
الأجهزة المرتبطة بمجموعة مستوى الصوت
<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="bus0_media_out">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
<gains>
<gain name="" mode="AUDIO_GAIN_MODE_JOINT"
minValueMB="-3200" maxValueMB="600" defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
أثناء الإعداد، تتحقّق مجموعة الحجم من قيم كسب البيانات المرتبطة وتضبط المجموعة على النحو التالي:
- حجم الخطوة: يجب استخدام الخيار نفسه على جميع الأجهزة التي تتحكّم فيها مجموعة الصوت.
- الحد الأدنى للأرباح: أقل حدّ أدنى لمستوى ربح بين الأجهزة في المجموعة.
- زيادة الأرباح إلى أقصى حد: أعلى أقصى ربح بين الأجهزة في المجموعة.
- الاكتساب التلقائي: أعلى مستوى ربح تلقائي بين الأجهزة في المجموعة.
وبالنظر إلى الطريقة التي يتم بها تكوين هذه القيم، يمكن تعيين كسب مجموعة مستوى الصوت خارج النطاق المتوافق مع جهاز مرتبط بمستوى الصوت المجموعة. وفي هذه الحالة، بالنسبة إلى هذا الجهاز، يتم ضبط الربح على الحد الأدنى للجهاز الحدّ الأقصى لقيمة الربح استنادًا إلى ما إذا كانت قيمة مجموعة الحجم أقل من أو أعلى النطاق.
معرّفات مجموعات المجلدات
ويتم تحديد مجموعات وحدات التخزين في وقت التشغيل بالترتيب المحدّد في ملف XML.
تتراوح أرقام التعريف بين 0
وN-1
ضمن منطقة صوتية، حيث يمثّل N
عدد
مجموعات الحجم في تلك المنطقة. بهذه الطريقة، لا تكون أرقام تعريف مجموعات الحسابات فريدة.
في مختلف المناطق تُستخدَم هذه المعرّفات لـ CarAudioManager
واجهات برمجة تطبيقات مرتبطة.
باستخدام مجموعات مستوى الصوت. أي واجهة برمجة تطبيقات تتعامل مع groupId
بدون zoneId
يتم ضبطها تلقائيًا على منطقة الصوت الأساسية.
إدارة الحجم في مناطق متعدّدة
من المتوقع أن تشتمل كل منطقة صوتية على مجموعة واحدة أو أكثر من مجموعات مستوى الصوت، وأن تكون كل منطقة صوت فيها.
ترتبط المجموعة بمنطقة صوت واحدة فقط. هذه العلاقة محددة
كجزء من car_audio_configuration.xml
. لمزيد من المعلومات، اطّلِع على المثال أعلاه.
في تحديد مجموعات الحجم.
يظلّ مستوى الصوت الحالي لكل منطقة للمستخدم المرتبط لتلك المنطقة. هذه الإعدادات خاصة بالمنطقة، أي إذا سجّل المستخدم الدخول إلى الشاشة المرتبطة بالمنطقة الأساسية، ثم في وقت لاحق علامات الدخول إلى المنطقة المقترنة بمنطقة صوت ثانوية، وتحميل مستويات الصوت واستمرارها تختلف المنطقة الأولى عن تلك الخاصة بالمنطقة الثانوية.
التعامل مع الأحداث الرئيسية لمستوى الصوت
يحدّد Android العديد من رموز المفاتيح للتحكّم في مستوى الصوت، بما في ذلك:
KEYCODE_VOLUME_UP
KEYCODE_VOLUME_DOWN
KEYCODE_VOLUME_MUTE
يوجِّه نظام Android أحداث مفتاح مستوى الصوت إلى التطبيقات تلقائيًا. السيارات
عمليات التنفيذ التي يجب أن تؤدي إلى معالجة هذه الأحداث الرئيسية من خلال
CarAudioService
، الذي يتصل بعد ذلك بـ setGroupVolume
أو setMasterMute
، باسم
مناسبًا. لفرض هذا السلوك، اضبط قيمة
إبلاغ config_handleVolumeKeysInWindowManager
إلى true
:
<resources>
<bool name="config_handleVolumeKeysInWindowManager">true</bool>
</resources>
ولا يمكن حاليًا أن تحدّد الأحداث الرئيسية لمستوى الصوت أيّ منطقة.
المخصصة لها ويُفترض أن تكون مرتبطة جميعها
منطقة الصوت. عند تلقّي حدث رئيسي لمستوى الصوت، يحدِّد CarAudioService
مجموعة مستوى الصوت التي يجب تعديلها من خلال استرجاع سياقات الصوت المحيط
المستخدم ثم ضبط مجموعة مستوى الصوت التي تشتمل على جهاز إخراج الصوت
ومرتبطًا بسياق الصوت ذي الأولوية القصوى. يُعد تحديد الأولويات
بناءً على ترتيب ثابت محدد في
CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY
التلاشي والتوازن
يشتمل كلا الإصدارين من AudioControl HAL على واجهات برمجة تطبيقات لضبط التلاشي والتوازن.
في السيارة. واجهات برمجة تطبيقات النظام المقابلة لقيم بطاقات CarAudioManager
إلى HAL للتحكم في الصوت. تتطلب واجهات برمجة التطبيقات هذه
android.car.permission.CAR_CONTROL_AUDIO_VOLUME
واجهات برمجة التطبيقات AudioControl API هي:
يغيِّر "
setBalanceTowardRight(float value)
" مستوى صوت مكبّر الصوت نحو الجانب الأيمن (+) أو الأيسر (-) من السيارة.- يتم توسيط 0.0
- +1.0 سليم تمامًا
- -1.0 متبقٍ بالكامل
- إذا كانت القيمة خارج النطاق من -1 إلى 1، فهي خطأ
يغيِّر "
setFadeTowardFront(float value)
" مستوى صوت مكبّر الصوت نحو الواجهة الأمامية (+) أو الخلفية (-) للسيارة.- يتم توسيط 0.0
- إعادة توجيه +1.0 بالكامل
- -1.0 بالكامل إلى الخلف
- إذا كانت القيمة خارج النطاق من -1 إلى 1، فهي خطأ
وأنت تقرر كيف يجب تطبيق هذه القيم وكيفية عرض القيم المستخدمين. ويمكن تطبيقها بصرامة على وسائل الإعلام أو على جميع المستويات أصوات Android تم أيضًا توفير الدعم في نظام Android 11 لتطبيق التأثيرات الصوتية على أجهزة إخراج الصوت. باستخدام هذا، من الممكن أو إدارة التلاشي والتوازن من خلال التأثيرات الصوتية على الملفات أجهزة إخراج وليس من خلال واجهات برمجة التطبيقات هذه.
تجنّب التداخل مع أصوات أخرى
يحدث تجنّب التداخل مع أصوات أخرى عندما تقلل المركبة الصوت في بث واحد بحيث يمكن سماع بث آخر يتم تشغيله في الوقت نفسه بشكل أكثر وضوحًا. في نظام التشغيل Android Automotive (AAOS) وتنفذ HAL تشويش الصوت. لا يمكن لنظام Android التحكّم في الأصوات خارج نظام التشغيل. في نظام Android 11، كانت المعلومات الرئيسية المتاحة لـ HAL لاتخاذ قرارات التجنب هو ما إذا كان ناتجان أم لا يتضمّن كل من الجهازين عمليات بث نشطة.
متى تحب البط
على الرغم من أنّ المصنّع الأصلي للجهاز هو من يحدّد كيفية تعامل المصنِّع الأصلي للجهاز من أجل التخلص من المشكلة. ننصح باستخدام الإرشادات التالية: HAL.
يتم عادةً تشغيل أحداث بث متعدّدة على جهاز Android عندما يتم تشغيل تطبيقَين أو خدمتَين التركيز على الصوت بشكل متزامن لمعرفة الوقت الذي قد يمنح فيه Android تجربة التركيز، يُرجى مراجعة مصفوفة التفاعل في أنواع القيود. ومع إطلاق المكوّن الإضافي للصوت في السيارة، يعتمد هذا أيضًا على إدارة ميزة "التركيز الصوتي"
يتم إجراء أي مجموعات بث بواسطة Android قبل تحقيق أي أرباح المنهجية. وبالتالي، فإنّ أي بث يجب تجاهله عند تشغيله في الوقت نفسه. مع جهاز آخر، يجب توجيههم إلى أجهزة إخراج منفصلة حتى تتمكن قناة HAL من وتطبيق البط قبل خلطها.
السلوك المقترَح للتحايل
فيما يلي يوصى بتجنب التفاعلات المتزامنة المحتملة.
التفاعل | الإجراء |
---|---|
EMERGENCY
| يتجاهل أو يكتم صوت كل شيء باستثناء SAFETY
|
SAFETY |
كل شيء على "البط" باستثناء EMERGENCY |
NAVIGATION |
بط كل شيء باستثناء SAFETY وEMERGENCY |
CALL |
بط كل شيء باستثناء SAFETY وEMERGENCY
وNAVIGATION |
VOICE |
بط CALL_RING |
VEHICLE_SOUNDS |
أنت تحدد أهمية الصوت النشط وما إذا كان يخفف من أصوات أخرى. |
MUSIC وANNOUNCEMENT |
اهرب من كل شيء. استثناءات هي نغمات تفاعل اللمس التي يتم تشغيلها
SYSTEM_SOUND
|
نقاط يجب أخذها في الاعتبار عند التحايل
قد تستخدم بعض التطبيقات والخدمات، مثل التنقل أو المساعد، عدة تطبيقات واللاعبين على تنفيذ الإجراءات. تجنُّب الارتباك القوي عند تدفق البيانات إيقاف التدفق عبر أجهزة الإخراج لضمان عدم استعادة الوسائط إلى وضع ملء الشاشة مستوى الصوت قبل الاختلاط قبل3 التشغيل التالي من شريط التنقل أو بدء تشغيل تطبيق المساعد.
للمركبات ذات مراحل الصوت المتعددة مع عزل جيد بما فيه الكفاية، يمكنك: لتوجيه الصوت إلى مناطق مختلفة من السيارة بدلاً من الهبوط من الهبوط. على سبيل المثال: يمكن توجيه إرشادات التنقل إلى مكبرات صوت مسند الرأس لدى السائق مواصلة تشغيل الموسيقى في جميع أنحاء المقصورة بمستوى الصوت العادي.
الأصوات الحرجة للحفاظ على الأمان
تم تقديم نظام التشغيل Android 11
واجهات برمجة تطبيقات التركيز الصوتي في HAL: يضمن HAL
يتم منح الأولوية للأصوات التي تمثل خطورة على سلامتك على الأصوات الأخرى. إذا تضمنت طبقة تجريد الأجهزة (HAL) الصوت
التي تركّز عليها USAGE_EMERGENCY
، فلا يمكن ضمان أن التطبيقات والخدمات من
لا يُشغِّل جهاز Android الأصوات. تحدّد طبقة تجريد الأجهزة (HAL) عمليات البث التي من Android
مختلَطة أو مكتومة الصوت لتشغيل الأصوات المهمة المتعلقة بالسلامة.
ضبط واجهة المستخدم لإعدادات مستوى الصوت
يفصل نظام AAOS واجهة المستخدم الخاصة بإعدادات مستوى الصوت عن إعدادات مجموعة الصوت. ويمكن تركيبها كما هو موضح في اضبط المكاسب على مستوى مجموعة مستويات الصوت. يضمن هذا الفصل عدم الحاجة إلى إجراء أي تغييرات في حال تغيير إعدادات مجموعات مستوى الصوت.
في واجهة مستخدم إعدادات السيارة، packages/apps/Car/Settings/res/xml/car_volume_items.xml
يحتوي على عناصر واجهة المستخدم (موارد العنوان والرمز) المرتبطة بكل
وعرفت AudioAttributes.USAGE
. يوفر هذا الملف عرضًا معقولاً
من VolumeGroups
المحددة باستخدام موارد مرتبطة
الاستخدام المعترف به الوارد في كل VolumeGroup
.
على سبيل المثال، يحدّد المثال التالي السمة VolumeGroup
على أنّها تتضمّن
voice_communication
وvoice_communication_signalling
الإعداد التلقائي
يؤدي تنفيذ واجهة مستخدم إعدادات السيارة إلى عرض VolumeGroup
باستخدام
الموارد المرتبطة بـ voice_communication
حيث إن هذه هي الوظيفة الأولى
في الملف.
<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto">
<item car:usage="voice_communication"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="voice_communication_signalling"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="media"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="game"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="alarm"
car:title="@*android:string/volume_alarm"
car:icon="@*android:drawable/ic_audio_alarm"/>
<item car:usage="assistance_navigation_guidance"
car:title="@string/navi_volume_title"
car:icon="@drawable/ic_audio_navi"/>
<item car:usage="notification_ringtone"
car:title="@*android:string/volume_ringtone"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistant"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="notification"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_request"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_instant"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_delayed"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_event"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_accessibility"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_sonification"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="unknown"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
</carVolumeItems>
يتم تعريف السمات والقيم المستخدمة في الإعداد أعلاه في
packages/apps/Car/Settings/res/values/attrs.xml
تستخدمها واجهة المستخدم لإعدادات مستوى الصوت
واجهات برمجة تطبيقات CarAudioManager التالية المستندة إلى VolumeGroup
:
getVolumeGroupCount()
لمعرفة عدد عناصر التحكّم التي يجب رسمها.getGroupMinVolume()
وgetGroupMaxVolume()
للحصول على الحدين الأدنى والعلوي.getGroupVolume()
للحصول على مستوى الصوت الحالي.registerVolumeChangeObserver()
سيتم إرسال إشعار إليك بتغييرات مستوى الصوت.
حدث مجموعة حجم السيارة
تكون حالات الاستخدام في السيارات التي تتضمّن تحديثًا لمستوى الصوت ومفتاح تبديل كتم الصوت لها سياق سياقي. الأسس التي قد تحدّد إجراءات تطبيقات معيّنة، مثل مستوى الصوت الإعدادات. الصوت الحالي وكتم صوت معاودة الاتصال من حزمة الصوت في السيارة ومعلومات سياقية محدودة لتلبية حالات استخدام السيارات والمستقبل بشكل أفضل قابلية التوسع، تمت إضافة CarVolumeGroupEvent إلى Android 14. يحمل كل حدث ثلاثة أنواع مهمة من المعلومات:
- قائمة
CarVolumeGroupInfo
EventTypes
(تم ربط البيانات بشكل بت)- قائمة
ExtraInfos
معلومات عن CarVolumeGroup
يملك متلقي معاودة الاتصال بالحدث الآن إمكانية الوصول إلى قائمة السيارة المتأثرة.
معلومات مجموعة الحجم. يعني ذلك أنّ التطبيق لا يحتاج إلى إجراء
لاستدعاءات إضافية لإطار عمل
الصوت في السيارة للحصول على أحدث حالة. مُمْكِنْ
ما عليك سوى استخدام رمز CarVolumeGroupInfos
الذي تم استلامه لتحديث واجهة المستخدم أو تحديث واجهة المستخدم
الولايات. ولتسهيل الأمر على التطبيقات، فإنّ الجوانب التي تغيّرت في مستوى صوت السيارة
يتم توفير المجموعة أيضًا كجزء من EventTypes
، كما هو موضّح أدناه.
أنواع الأحداث
تحدِّد هذه السياسة جانب CarVolumeGroupInfo
الذي تم تغييره. يمكن للتطبيقات استخدام ذلك من أجل
تحديد التغييرات واتخاذ الإجراءات المطلوبة. على سبيل المثال:
تشير قيمة EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED
إلى أن
تم تغيير الحد الأقصى لمؤشر زيادة الحجم CarVolumeGroups
ويمكن الاستعلام عن
CarVolumeGroupInfo.getMaxVolumeGainIndex()
يوضح الجدول التالي العلاقة بين EventType
و
CarVolumeGroupInfo
نوع الحدث | معلومات عن CarVolumeGroup |
---|---|
EVENT_TYPE_VOLUME_GAIN_INDEX_changeD | CarVolumeGroupInfo.getVolumeGrowIndex() |
EVENT_TYPE_VOLUME_MIN_INDEX_changeD | CarVolumeGroupInfo.getMinVolumeGrowIndex() |
EVENT_TYPE_VOLUME_MAX_INDEX_changeD | CarVolumeGroupInfo.getMaxVolumeGrowIndex() |
EVENT_TYPE_MUTE_changeD | CarSizeGroupInfo.is الآتيd() |
EVENT_TYPE_VOLUME_BLOCKED_CHANGED | CarVolumeGroupInfo.isBlock() |
EVENT_TYPE_ATTENUATION_تغيير | CarVolumeGroupInfo.isAttenuated() |
EVENT_TYPE_ZONE_CONFIGURATION_changeD | CarVolumeGroupInfo.getAudioAttributes() |
معلومات إضافية
تقدّم معلومات إضافية عن سبب تغيير CarVolumeGroup
. حملة التطبيقات
استخدام هذه المعلومات لتوفير سياق إضافي لتنبيه المستخدم
لاتّخاذ إجراء أو إرسال إشعار على سبيل المثال: EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL
يشير إلى اختزال عابر نشط بسبب الحمل الحراري الزائد. التطبيق
يمكنك إعلام المستخدم إذا حاول رفع مستوى الصوت.
لا نفرض أي عملية على "ExtraInfos
". يرك هذا الأمر لتقديرك
لتحديد العملية استنادًا إلى ExtraInfos
. على سبيل المثال، إذا كانت التخفيف
نشط بسبب EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED
، ويمكنك أيضًا اختيار
تلاشي واجهة مستخدم شريط مستوى الصوت في البداية لمنع المستخدم من تغيير مستوى الصوت.
وقد يختار البعض الآخر تسليط الضوء على أنّ ميزة التجنّب نشطة والسماح للمستخدم
لتغيير مستوى الصوت.
يعتمد إطار عمل الصوت في السيارة على HAL IAudioGainCallback
للتحكّم في الصوت من أجل:
تقديم ExtraInfos
المقترَحة. لمزيد من المعلومات، يُرجى مراجعة
معاودة الاتصال للحصول على الصوت:
يتم تغيير أداة "CarVolumeGroupEvent
" لتلبية الاحتياجات المستقبلية لإطار عمل الصوت في السيارة. أر
وتعتزم إتاحة ميزات جديدة من خلال CarVolumeGroupEvent
فقط. أر
ننصح بشدة مطوّري التطبيقات باستخدام CarVolumeGroupEvent
للتعامل مع
تجميع الصوت وكتم التغييرات.
معاودة الاتصال بحدث مجموعة مستوى صوت السيارة
يوفّر Android 14 معاودة الاتصال الجديدة للمستخدمين الحاصلين على امتياز
تطبيقات النظام الأساسي للتسجيل وإشعار CarVolumeGroupEvents
.
للتسجيل من أجل معاودة الاتصال، استخدم
CarAudioManager#registerCarVolumeGroupEventCallback()
لإلغاء تسجيل معاودة الاتصال، استخدم
CarAudioManager#unregisterCarVolumeGroupEventCallback()
في حال تسجيل أحد التطبيقات في الإصدار الجديد من CarVolumeGroupEventCallback
والإصدار القديم
CarVolumeCallback
، يتم منح الأولوية للحدث CarVolumeGroupEventCallbacks
.
لم تعُد حزمة الصوت في السيارة تعمل على تشغيل "CarVolumeCallback
". وهذا يمنع
مشغلات مكرّرة إلى التطبيق نفسه في الحدث نفسه.
ننصحك بشدة باستخدام CarVolumeGroupEventCallback
لإدارة
تجميع الصوت وكتم التغييرات.
معاودة الاتصال لاستخدام الصوت
بدايةً من نظام التشغيل Android 13، يمكن أن يؤدّي فلتر HAL إلى تشغيل استدعاء غير متزامن لإدارة التحديثات على مستوى الصوت بسبب التغييرات في نظام الصوت في السيارة
واجهة برمجة تطبيقات HAL
AudioControl @2.0 AIDL
يضيف الإصدار 2.0 من AudioControl AIDL HAL واجهة برمجة التطبيقات التالية:
واجهة برمجة التطبيقات | الغرض |
---|---|
IAudioControl#registerGainCallback |
تسجيل نسخة افتراضية من IAudioGainCallback باستخدام طبقة تجريد الأجهزة (HAL) للتحكّم الصوتي |
IAudioGainCallback#onAudioDeviceGainsChanged |
استدعاء غير متزامن للإعلام بالتغييرات التي تطرأ على إعدادات زيادة الصوت. |
يتضمن استدعاء HAL للتحكّم في الصوت قوائم بالأسباب
AudioGainConfigInfo
، والذي يتكوّن مما يلي:
- رقم تعريف المنطقة
- عنوان منفذ الجهاز
- مؤشر الحجم > يمكن أن يكون الفهرس مقيدًا أو فهرس تحديث.
يمكن تصنيف الأسباب على نطاق واسع على النحو التالي:
- أسباب القيود: تغيير مؤقت في سلوك كتم الصوت وكتم الصوت
- تعديل الأسباب: تغيير دائم في سلوك مستوى الصوت
أنواع القيود
اعتبارًا من AudioControl
HAL AIDL
V3
، ستكون الأنواع التالية متاحة.
القيود:
- كتم الصوت
- تؤدي إلى الحظر
- القيود
- خفيف
القيود النشطة | تغيير مستوى الصوت الذي يشغّله المستخدم | تبديل كتم الصوت الذي يشغّله المستخدم |
---|---|---|
كتم الصوت | ❌ | ❌ (إعادة الصوت) ✔ (كتم الصوت) |
تؤدي إلى الحظر | ❌ | ✔ |
القيود | ❌ (تجاوز الحدّ الأقصى) ✔ (أقل من الحدّ الأقصى) |
✔ |
خفيف | ✔ | ✔ |
الأولوية بين القيود هي كتم الصوت > الحظر > القيود > تنبيه.
القيود المفروضة على كتم الصوت
قيود كتم الصوت هي:
Reasons.TCU_MUTE
Reasons.REMOTE_MUTE
يحافظ إطار عمل الصوت في السيارة داخليًا على حالتَي كتم الصوت هاتَين:
كتم صوت المستخدم: يتم التبديل بناءً على طلب المستخدم، سواء من خلال
CarAudioManager
أو الأحداث الرئيسيةكتم صوت HAL: تم التبديل بناءً على قيود كتم الصوت التي تم تلقّيها من خلال
AudioGain
معاودة الاتصال.
للمستمعين مثل تطبيق "الإعدادات"، يجب كتم الصوت بشكل عام في مجموعة مستوى الصوت
(CarVolumeGroupInfo.isMuted()
) تعتمد على ما إذا كان أيٌّ من
عمليات التجاهل أعلاه.
عند تفعيل كتم صوت HAL، يتغير مستوى الصوت الوارد بالكامل وتتم إعادة صوت المجموعة. يتم تجاهل الطلبات طوال مدة التقييد.
حالة التفاعل: كتم صوت HAL نشط وطلبات المستخدم لتبديل كتم الصوت
عند تفعيل كتم صوت HAL وإيقاف ميزة كتم صوت المستخدم:
- تم تغيير حالة كتم الصوت العامة لمجموعة مستوى الصوت إلى
true
. - ستتمّ معالجة طلبات المستخدم لتفعيل كتم الصوت.
- السبب: يجب الالتزام بطلبات تجاهل المستخدم في جميع الأوقات للحفاظ على خصوصية المستخدمين.
عند تفعيل كتم صوت HAL وتفعيل ميزة كتم صوت المستخدم:
تم تغيير حالة كتم الصوت العامة لمجموعة مستوى الصوت إلى
true
.ستتم معالجة طلبات المستخدم لإيقاف كتم الصوت في
NOT
. مستخدم مخزّن مؤقتًا فستظل حالة كتم الصوت مفعّلة.السبب: لن يتم الالتزام بطلبات إلغاء تجاهل المستخدم إلا في حال عدم وجود قيود نشطة.
السبب: قد يؤدي إلغاء كتم صوت المستخدم في ذاكرة التخزين المؤقت إلى حدوث انفجار صوتي غير مقصود وتعريض سلامة المستخدمين للخطر. هذا صحيح بشكل خاص إذا كانت حالة كتم الصوت مفعّلة على مستوى دورات التشغيل، ما يؤدي إلى خفض معدّل مستوى الوعي بمستوى الصوت المشروع.
حالة التفاعل: تفعيل كتم صوت HAL وإيقافه أثناء عدم إجراء أي تغييرات لكتم صوت المستخدم
سيؤدي تبديل كتم صوت HAL إلى تغيير حالة كتم الصوت بشكل عام لمجموعة مستوى الصوت. ومع ذلك، عدم تحديث حالة كتم صوت المستخدم مباشرةً. عند إيقاف كتم صوت المستخدم وكتم صوت HAL تلقي معاودة الاتصال للتمكين:
- تم تغيير حالة كتم الصوت العامة لمجموعة مستوى الصوت إلى
true
. ستتم معالجة طلبات المستخدم لتغيير مستوى الصوت
NOT
مع كتم صوت HAL. مفعّلة.السبب: لا يمكن للمستخدم إدراك الصوت أثناء تفعيل كتم الصوت. السماح يمكن أن يؤدي تغيير مستوى الصوت إلى حدوث انفجار صوتي وتعريض سلامة المستخدم للخطر.
السبب: يمكن للتطبيقات ذات مستوى الصوت التسجيل لمعاودة الاتصال وتشغيل إعادة الصوت (CarAudioManager.setVolumeGroupTotal(...,/* التكرار=*/ true,..)) تلقائيًا دون تدخل المستخدم، إذا كان هذا هو السلوك المتوقع المصنّع الأصلي للجهاز.
عند إيقاف كتم صوت HAL أثناء إيقاف كتم صوت المستخدم:
تم تغيير حالة كتم صوت مجموعة مستوى الصوت إلى
false
.السبب: زيادة تثبيت حالة كتم الصوت وطلب من المستخدم إلغاء كتم الصوت مقاطعة المستخدم بدون داعٍ عند تبديل حالات كتم الصوت بشكل متكرر
ستتم معالجة طلبات المستخدمين لتغيير مستوى الصوت بشكل طبيعي.
تؤدي إلى الحظر
قيود الحظر هي:
Reasons.FORCED_MASTER_MUTE
Reasons.REMOTE_MUTE
-
Reasons.TCU_MUTE
.
عندما تكون "قيود الحظر" مفعَّلة، تظهر الطلبات من المستخدمين لإجراء ما يلي:
- لا تتم معالجة تغيير مستوى الصوت.
- تتم معالجة مفتاح تبديل كتم الصوت.
القيود
قيود القيود هي:
Reasons.THERMAL_LIMITATION
Reasons.SUSPEND_EXIT_VOL_LIMITATION
عندما تكون قيود القيود نشطة، يتم إرسال الطلبات من المستخدمين إلى:
تغيير مستوى الصوت:
- تتم المعالجة ضمن القيود
- لا تتم معالجة الحد الأقصى المسموح به.
تتم معالجة مفتاح تبديل كتم الصوت.
خفيف
القيود المفروضة على الانتباه هي:
Reasons.ADAS_DUCKING
Reasons.NAV_DUCKING
Reasons.PROJECTION_DUCKING
عندما تكون قيود المعالجة مفعَّلة، يتم إرسال طلبات من المستخدمين لإجراء ما يلي:
تتم معالجة تغيير مستوى الصوت. تَمّْ ضَبْطْ مُسْتَوَى الصُّوتِ الْحَالِي الْجِدِيدْ عَلَى مستوى الصوت المخفف (بدلاً من مستوى الصوت السابق). التغييرات المستقبلية في مستوى الصوت من هذا المستوى.
تتم معالجة زر تبديل كتم الصوت.
تعديل للفهرس
يُعتبر ما يلي تعديلاً غير متزامن لمؤشر الحجم:
Reasons.EXTERNAL_AMP_VOL_FEEDBACK
لهذا السبب، يمكن أن يعدّل AudioControl HAL الفهرس الحالي لمجموعة مستوى الصوت.
مع الفهرس المحدد. يُستخدَم هذا الصوت بشكل أساسي كملاحظات من النظام الصوتي.
لطلب تغيير مستوى الصوت من إطار عمل وضع الصوت في السيارة ويكون تحديث الفهرس
أيضًا مع Apps كاستدعاء CarVolumeGroupEvent
للمزامنة
الفهرس.
أمثلة
حالة الاستخدام: يعدِّل المستخدم مؤشر الحجم إلى 30.
يستخدم المستخدم تطبيق مستوى الصوت لتغيير مؤشر مستوى الصوت إلى 30.
يتم تحويل هذا الفهرس إلى زيادة مستوى الصوت وإرساله إلى HAL للصوت.
عمليات تنفيذ المورّدين لـ "
Audio HAL
" تلقّي الزيادة في الحجم الجديدة وتعديلها نظام الصوت (مثل مضخّم صوت خارجي).يستجيب نظام الصوت بأن يتم تعديل مستوى الصوت فقط إلى الفهرس 15 (لأسباب غير معروفة لنظام Android).
عمليات تنفيذ المورّد لعوامل التشغيل
AudioControl HAL
:IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {..., 15 /* New index */})
تستهلك خدمة الإعدادات الصوتية للسيارة الفهرس الجديد من معاودة الاتصال التي يتم استخدامها التثبيت والاستدعاءات لتطبيق مستوى الصوت. الفهرس الذي طلبه المستخدم هو 30. ومع ذلك، تعمل الملاحظات غير المتزامنة في النظام الصوتي على تحديث الفهرس إلى 15.
حالة الاستخدام: أول تشغيل للصوت بعد الخروج من وضع التعليق
تم ضبط مؤشر الحجم قبل التعليق على مستوى عالٍ 95 (النطاق: [0-99]).
يدخل Android في وضع التعليق.
بعد تعليق نظام Android (على سبيل المثال، استئناف):
يطبِّق المورّد
Audio HAL/AudioControl HAL
فهرسًا آمنًا بقيمة 30 على نظام الصوت محليًا.يؤدي المورّد
AudioControl HAL
أيضًا إلى طلب معاودة الاتصال للفهرس الآمن:
IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {..., 30 /* safe index */})
تستهلك خدمة الإعدادات الصوتية للسيارة الفهرس الجديد من معاودة الاتصال التي يتم استخدامها باستمرار وعمليات الاستدعاء الخاصة به إلى تطبيق وحدة التخزين الذي تزامن الفهرس. يبلغ مؤشر الحجم قبل التعليق 95. ومع ذلك، بعد السيرة الذاتية، يصبح هذا الفهرس تم ضبطه على مستوى صوت آمن يبلغ 30 من قِبل أداة تنفيذ
AudioControl HAL
.
إعدادات مستوى الصوت الديناميكي
بالنسبة إلى هذه الميزة، نأخذ في الاعتبار حالات الاستخدام الأساسية التالية:
إعداد نهاية الخط (EOL) للمركبة:
تفضل شركات تصنيع السيارات تحديث إعدادات مستوى الصوت في EOL بناءً على المركبة إعداد نظام الصوت. وعادةً ما يكون هذا تحميلاً جانبيًا بدون تحديث صورة Android SW
قد تحتاج الشركات المصنّعة للسيارات إلى تعديل إعدادات مستوى الصوت أثناء الجدول الزمني للخدمة.
ضبط بيئة التشغيل: تتوافق الأنظمة الصوتية للسيارات مع مساحات خارجية. إعدادات مكبّر الصوت وقد تستضيف وحدات ECU هذه نطاق الصوت من الإعدادات التي تم الاستعلام عنها أثناء وقت التشغيل.
الضبط عند الطلب: يتم تقديم دعم الحاجة المتزايدة إلى ميزات الصوت المستندة إلى الطلب التي يشترك فيها المستخدمون في الإشارات المحسّنة قيد المعالجة لفترة زمنية. إعدادات نطاق مستوى الصوت الجديدة هي صالحة طوال مدة الاشتراك
التصميم
يتم ضبط مستوى الصوت الديناميكي على ثلاث مراحل:
الاستكشاف: اكتشاف تنفيذ HAL للتحكم في الصوت في المورِّد ملحقًا به تحديثات النطاق من خلال آلية IPC مخصصة يملكها المورد.
وبعد اكتشافه، يتم إنشاء معاودة الاتصال من خلال
AudioControl::IModuleChangeCallback
تعديل: تُحدِّث حزمة الصوت في السيارة حالات مجموعة الصوت باستخدام الوضع الجديد ونطاقات الصوت.
ويتم بذل الجهود للحفاظ على مستوى الصوت نفسه بعد تعديل النطاق. ولكن إذا تخطى الفهرس الحدود، فسيتم تعيين مؤشر الحجم الحالي على قيمة آمنة. على سبيل المثال، المستوى الافتراضي الذي يقدمه البائع أثناء رد الاتصال.
معاودة الاتصال:
بعد إجراء تعديلات على نطاق مجموعة مستوى الصوت، تبدأ حزمة الصوت في السيارة معاودة الاتصال تطبيقات مسجّلة من خلال
CarVolumeGroupEventCallback
.يتضمّن "
CarVolumeGroupEvent
" نوع الحدث "CarVolumeGroupInfo
" المعدّل. (ما الذي تم تغييره) والمعلومات الإضافية (سبب التغيير).
الشكل 1. إعداد مستوى الصوت الديناميكي
واجهة برمجة تطبيقات HAL
AudioControl 3.0 AIDL
يقدّم الإصدار 3.0 من AudioControl AIDL HAL واجهات برمجة التطبيقات التالية:
واجهة برمجة التطبيقات | |
---|---|
IAudioControl#setModuleChangeCallback | لضبط مثيل من IModuleChangeCallback مع AudioControl HAL. |
IAudioControl#clearModuleChangeCallback | يؤدي هذا الإجراء إلى محو مثيل IModuleChangeCallback الذي تم تعيينه سابقًا باستخدام HAL للتحكم في الصوت. |
IModuleChangeCallback#onAudioPortsChanged | معاودة الاتصال للإبلاغ عن تغييرات منافذ الصوت |
التسلسل
في ما يلي الرسم البياني للتسلسل لإعدادات مستوى الصوت الديناميكي.
الشكل 2. رسم بياني تسلسلي لضبط مستوى الصوت الديناميكي
الجوانب الرئيسية
لتحسين هذه الميزة، يجب مراعاة ما يلي.
يجب أن تتطابق منافذ الصوت المتوفّرة كجزء من عملية معاودة الاتصال مع معايير تعريف BUS:
- منفذ الجهاز: "
IN_DEVICE
" و"OUT_DEVICE
" - التواصل.
BUS
- العنوان. معرَّف في تعريف HAL الصوتي
- وضع اكتساب الألوان.
JOINT
- منفذ الجهاز: "
يجب على المورّدين تحديد مجموعة كبيرة من تعريفات نطاق الصوت في الصوت سياسة HAL واستخدِم معاودة الاتصال لتخصيصها لخيارات المركبة. يمكنك الاطّلاع على يتوفّر تعريف واحد (
IModuleChangeCallbac
) لواجهة AIDL للحصول على مزيد من المعلومات.عندما تنتمي أكثر من حافلة صوتية واحدة إلى مجموعة مستوى الصوت نفسها، يجب أن تكون كل حافلة صوتية واحدة. لها تعريفات نطاقات حجم متطابقة. يؤدي عدم الالتزام بذلك إلى ركوب السيارة. إطار عمل صوتي يرفض تعريف نطاق مستوى الصوت الجديد