تنظیمات صوتی ماشین

در 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 برای تعریف مسیریابی، گروه‌های صدا، فوکوس صوتی و مدیریت ducking استفاده می‌شوند. زمینه های صوتی استاتیک در AAOS در زیر فهرست شده است.

این جدول نگاشت بین زمینه های صوتی و کاربردها را شرح می دهد. ردیف های برجسته برای استفاده از سیستم جدید ارائه شده است.

CarAudioContext کاربردهای ویژگی مرتبط
موسیقی UNKNOWN
GAME
MEDIA
جهت یابی ASSISTANCE_NAVIGATION_GUIDANCE
دستور صوتی ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING 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 اختصاص داده می شود.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 منتقل می‌شود تا در خروجی این دستگاه‌ها اعمال شود.

برای منطقه اولیه، توصیه می کنیم که صداهای سیستم جدا از صداهای دیگر باشد. این اجازه می دهد تا صداهای خودرو با اولویت بالاتری برخورد شود. سرویس صوتی خودرو در حال حاضر این تمایزها را برای صداهای خودرو از نظر فوکوس و مدیریت اردک ایجاد کرده است. به عنوان مثال، یک درخواست فوکوس صدای اضطراری اولویت بیشتری نسبت به درخواست فوکوس دیگر دارد.

برای ساده نگه داشتن کارها، در مثال منطقه ثانویه، همه زمینه های صوتی به یک دستگاه واحد و یک گروه حجمی هدایت می شوند.

پیکربندی صوتی منطقه ساکن

در اندروید 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 فقط می توانند یک نگاشت یک به یک داشته باشند.

پیکربندی صدای ماشین اندروید 14

در اندروید 14، AAOS سرویس پلاگین OEM را معرفی کرد که به شما امکان می دهد رفتار صوتی را که توسط سرویس صوتی ماشین نظارت می شود، به طور فعال مدیریت کنید. به همراه خدمات افزونه جدید، تغییرات زیر به فایل تنظیمات صوتی خودرو اضافه می شود:

  • OEM زمینه صوتی خودرو را تعریف کرده است
  • تنظیمات پویا منطقه غیر اولیه

زمینه صوتی خودرو تعریف شده توسط OEM

برای فعال کردن یک پیکربندی صوتی انعطاف‌پذیر، در Android 14، سرویس صوتی خودرو اجازه می‌دهد تا کاربردهای صوتی متفاوت از زمینه‌های صوتی ثابت تعریف شده در بالا گروه‌بندی شوند. این زمینه تعریف شده توسط OEM را می توان در فایل car_audio_configuration.xml نسخه 3 تعریف کرد.

در عوض از زمینه های صوتی ثابت تعریف شده فعلی استفاده می شود. فرمت کلی زمینه صوتی خودرو تعریف شده توسط 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 استفاده شود. در آینده، استفاده‌های جدیدتر از ویژگی‌های صوتی به مناسب‌ترین زمینه برای کاهش خطا در هنگام مهاجرت از یک نسخه اندروید به نسخه دیگر اختصاص داده می‌شود.

در حالی که زمینه تعریف شده توسط OEM برای گسترش بیشتر سرویس صوتی پلاگین OEM معرفی شد، هنوز هم می توان بدون سرویس پلاگین OEM از آن استفاده کرد. رفتار صوتی شبیه به خدمات صوتی استاتیک است:

  • تعاملات فوکوس صوتی ویژگی صوتی برای تعیین بهترین رفتار تطبیقی ​​که توسط ماتریس تعامل فوکوس صوتی تنظیم شده است استفاده می شود. برای جزئیات، به فوکوس صوتی مراجعه کنید.

  • ویژگی صوتی کنترل حجم صدا برای تعیین بهترین تطابق استفاده می شود:

    • گروه حجم بر اساس زمینه تعریف شده توسط OEM.
    • اولویت از لیست حجم ثابت پیکربندی شده است.
  • رفتار پخش صدا:

    • استفاده از ویژگی صوتی برای فوکوس صوتی فعلی برای نگاشت به اطلاعات دستگاه صوتی خروجی همانطور که در فایل پیکربندی صدای خودرو تعریف شده است، استفاده می شود.

    • ویژگی صوتی برای نگاشت زمینه استاتیک مربوطه به اردک، بر اساس ماتریس ducking صوتی استاتیک استفاده می شود.

پیکربندی مناطق صوتی پویا

در 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 استفاده کنید. OEM هایی که به نسخه های جدید Android به روز می شوند می توانند دوباره از فایل car_audio_configuration.xml استفاده کنند.

برای استفاده از یک ویژگی جدید که به اطلاعات جدید موجود در car_audio_configuration.xml نیاز دارد، نسخه باید به روز شود. تلاش برای استفاده از نسخه قدیمی‌تر یک فایل با اطلاعاتی که در آن نسخه فایل پشتیبانی نمی‌شود، هنگام شروع سرویس خودرو، یک IllegalStateException ایجاد می‌کند. پیام استثنا حاوی اطلاعات مربوطه در مورد اطلاعات مورد استفاده و حداقل نسخه مورد نیاز است.