تكوين صوت السيارة

في 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
MEDIA
ملاحة ASSISTANCE_NAVIGATION_GUIDANCE
أمر صوتي ASSISTANT
ASSISTANCE_ACCESSIBILITY
اتصل بالرنين 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 عند بدء تشغيل خدمة السيارة. تحتوي رسالة الاستثناء على المعلومات ذات الصلة حول المعلومات المستخدمة والحد الأدنى للإصدار المطلوب.