إدارة مستوى الصوت

تم تضمين ميزة إدارة الحجم في 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.

إعدادات مستوى الصوت الديناميكي

بالنسبة إلى هذه الميزة، نأخذ في الاعتبار حالات الاستخدام الأساسية التالية:

  1. إعداد نهاية الخط (EOL) للمركبة:

    • تفضل شركات تصنيع السيارات تحديث إعدادات مستوى الصوت في EOL بناءً على المركبة إعداد نظام الصوت. وعادةً ما يكون هذا تحميلاً جانبيًا بدون تحديث صورة Android SW

    • قد تحتاج الشركات المصنّعة للسيارات إلى تعديل إعدادات مستوى الصوت أثناء الجدول الزمني للخدمة.

  2. ضبط بيئة التشغيل: تتوافق الأنظمة الصوتية للسيارات مع مساحات خارجية. إعدادات مكبّر الصوت وقد تستضيف وحدات ECU هذه نطاق الصوت من الإعدادات التي تم الاستعلام عنها أثناء وقت التشغيل.

  3. الضبط عند الطلب: يتم تقديم دعم الحاجة المتزايدة إلى ميزات الصوت المستندة إلى الطلب التي يشترك فيها المستخدمون في الإشارات المحسّنة قيد المعالجة لفترة زمنية. إعدادات نطاق مستوى الصوت الجديدة هي صالحة طوال مدة الاشتراك

التصميم

يتم ضبط مستوى الصوت الديناميكي على ثلاث مراحل:

  • الاستكشاف: اكتشاف تنفيذ 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 للحصول على مزيد من المعلومات.

  • عندما تنتمي أكثر من حافلة صوتية واحدة إلى مجموعة مستوى الصوت نفسها، يجب أن تكون كل حافلة صوتية واحدة. لها تعريفات نطاقات حجم متطابقة. يؤدي عدم الالتزام بذلك إلى ركوب السيارة. إطار عمل صوتي يرفض تعريف نطاق مستوى الصوت الجديد