إعدادات الصوت في السيارة

في الإصدار 10 من نظام التشغيل Android، تم استبدال 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 في ملف تعريف ملف car_audio_configuration.xml لتحديد إعدادات ملف car_audio_configuration.xml.

مناطق الصوت في السيارة:

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

    • التركيز على الصوت
    • توجيه الصوت
    • تجنب التداخل مع أصوات أخرى
  • مجموعات مستوى الصوت في السيارة:

    • يتم التحكّم في جميع أجهزة الصوت التي تحتوي على مجموعة مستويات صوت معًا باستخدام التغييرات نفسها في مستوى الصوت. يجب أن تكون إعدادات مستوى الصوت لجميع الأجهزة في مجموعة واحدة متطابقة.

    • ربط سياق الصوت بالأجهزة الصوتية استخدِم هذه الميزة لإنشاء ملف صوتي مجمّع يربط استخدامات الصوت بجهاز إخراج.

    • يجب تمثيل جميع السياقات الصوتية ضمن منطقة. يتيح ذلك إعداد توجيه الصوت بدقة لجميع استخدامات سمة الصوت.

السياقات الصوتية

لتبسيط ضبط الصوت في AAOS، تم تجميع الاستخدامات المشابهة في CarAudioContexts. يتم استخدام سياقات الصوت هذه في CarAudioService لتحديد عمليات التوجيه ومجموعات الصوت وتركيز الصوت وإدارة خفض الصوت. في ما يلي سياقات الصوت الثابتة في AAOS.

يصف هذا الجدول التعيين بين السياقات الصوتية وحالات الاستخدام. يتم عرض الصفوف المميّزة للاستخدام الجديد للنظام.

CarAudioContext Associated AttributeUsages
موسيقى UNKNOWN
GAME
MEDIA
التنقّل ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
اتصال VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM 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)

على سبيل المثال، قد تحتوي المركبة على منطقتَين، منطقة أساسية ونظام ترفيهي في المقعد الخلفي. في هذا السيناريو، يمكنك تصميم ملف car_audio_configuration.xml محتمل من الإصدار 2 على النحو التالي:

<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 id دائمًا. إذا تم تحديد isPrimary="true"، لن تكون audioZoneId مطلوبة.

  • لا يمكن تكرار الرقمَين audioZoneId وoccupantZoneId.

  • لا يمكن أن يتضمّن audioZoneId وoccupantZoneId سوى عملية تعيين واحدة لواحد.

ضبط إعدادات الصوت في السيارة على Android 14

في Android 14، طرحت AAOS خدمة المكوّن الإضافي لمصنعي المعدّات الأصلية، التي تتيح لك إدارة سلوك الصوت بشكل أكثر فعالية تحت إشراف خدمة الصوت في السيارة. بالإضافة إلى خدمات المكوّنات الإضافية الجديدة، تتم إضافة التغييرات التالية إلى ملف إعدادات الصوت في السيارة:

  • سياق الصوت في السيارة المحدّد من قِبل المصنّع الأصلي
  • الإعدادات الديناميكية للمنطقة غير الأساسية

سياق الصوت في السيارة الذي يحدّده المصنّع الأصلي للسيارة

لتفعيل إعدادات صوتية مرنة، في الإصدار 14 من نظام التشغيل Android، تسمح خدمة الصوت في السيارة بتجميع استخدامات الصوت بشكل مختلف عن سياقات الصوت الثابتة المحدّدة أعلاه. يمكن تحديد هذا السياق الذي يحدّده المصنّع الأصلي للجهاز في ملف 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 إلى آخر.

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

  • التفاعلات مع ميزة "التركيز على الصوت" تُستخدَم سمة الصوت لتحديد أفضل سلوكٍ لل مطابقة كما تم إعداده من خلال مصفوفة تفاعل تركيز الصوت. للاطّلاع على التفاصيل، يُرجى الاطّلاع على مقالة أولوية الصوت.

  • تُستخدَم سمة التحكّم في مستوى الصوت لتحديد أفضل مطابقة:

    • مجموعة مجلدات استنادًا إلى السياق الذي يحدّده المصنّع الأصلي للجهاز
    • الأولوية من قائمة الوحدات الثابتة التي تم ضبطها
  • سلوك ميزة "تجنُّب التداخل مع أصوات أخرى":

    • يتم استخدام سمة الصوت لتركيز الصوت الحالي لربطه بمعلومات جهاز الصوت المُصدِر كما هو محدّد فيملف إعدادات الصوت في السيارة.

    • تُستخدَم سمة الصوت لربط السياق الثابت المقابل بخفض الصوت، استنادًا إلى مصفوفة خفض الصوت الثابت.

إعدادات مناطق الصوت الديناميكية

في 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) فقط. يمكن أن تتضمّن المناطق غير الأساسية إعدادات متعدّدة. تنطبق القواعد التالية على إعدادات الصوت في السيارة:

  • يمكن أن تحتوي منطقة الصوت الأساسية على إعداد واحد فقط.

  • يمكن أن تتضمّن مناطق الصوت غير الأساسية إعدادات متعدّدة.

  • يجب أن يكون الاسم فريدًا لكل منطقة صوتية وإعدادات منطقة صوتية.

  • ضمن منطقة صوتية، قد تختلف إعدادات الصوت:

    • ولا يلزم أن يكون إعداد مجموعات الصوت متطابقًا.
    • ولا يلزم أن يكون تحديد سياق الصوت هو نفسه.
  • يجب أن تكون أسماء أجهزة إخراج الصوت فريدة في جميع المناطق أو الإعدادات. يجب أن يظهر اسم الجهاز مرة واحدة فقط في إعدادات الصوت أو المناطق.

  • يجب أن تتضمّن أجهزة الصوت التي تنتمي إلى مجموعة مستوى الصوت نفسها إعدادات معالجة الصوت نفسها.

  • يجب تحديد جميع سياقات الصوت (التابعة لجهة التصنيع أو الثابتة) لكل إعداد صوتي.

التوافق مع الإصدارات المستقبلية

على الرغم من أنّ الإصدارات الجديدة من car_audio_configuration.xml توفّر ميزات جديدة في كل تحديث، سيظل بإمكانك استخدام الملفات القديمة في الإصدارات الأحدث من AAOS. يمكن لمصنّعي الأجهزة الأصليين الذين يُجريون تحديثات إلى إصدارات جديدة من Android إعادة استخدام ملف car_audio_configuration.xml.

لاستخدام ميزة جديدة تتطلّب معلومات جديدة مضمّنة في car_audio_configuration.xml، يجب تحديث الإصدار. يؤدي محاولة استخدام إصدار قديم من ملف يحتوي على معلومات غير متوافقة مع هذا الإصدار من الملف إلى ظهور خطأ IllegalStateException عند بدء خدمة السيارة. تحتوي رسالة المحاولة التالية على المعلومات ذات الصلة بالمعلومات المستخدَمة والحد الأدنى للإصدار المطلوب.