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

در 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 کاربردهای ویژگی مرتبط
MUSIC UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
CALL VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
NOTIFICATION NOTIFICATION
NOTIFICATION_*
SYSTEM_SOUND ASSISTANCE_SONIFICATION
EMERGENCY EMERGENCY
SAFETY SAFETY
VEHICLE_STATUS VEHICLE_STATUS
ANNOUNCEMENT ANNOUNCEMENT

مسیریابی AAOS را فعال کنید

برای استفاده از مسیریابی مبتنی بر AAOS، باید پرچم audioUseDynamicRouting را روی true تنظیم کنید:

<resources>
    <bool name="audioUseDynamicRouting">true</bool>
</resources>

هنگامی که false ، مسیریابی و بسیاری از CarAudioService غیرفعال می شود و AAOS به رفتار پیش فرض AudioService برمی گردد.

موتور سیاست صوتی قابل تنظیم

برای گسترش بیشتر مدیریت صدای خودرو در اندروید 14، AAOS استفاده از مدیریت صدا را از طریق موتور سیاست صوتی قابل تنظیم (CAP) معرفی کرد. انجام این کار انعطاف پذیری بیشتری را برای کنترل مسیریابی صدا و مدیریت حجم صدا فراهم می کند و تعریف همه کاره را ارائه می دهد:

شما می توانید موتور سیاست صوتی قابل تنظیم (CAP) را با استفاده از useCoreAudioVolume و useCoreAudioRouting فعال کنید، برای جزئیات بیشتر به موتور خط مشی صوتی قابل تنظیم مراجعه کنید.

منطقه اولیه

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

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

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

تعریف گروه حجمی برای موتور CAP

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


<group name="media">
  <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 name="navigation">
  <device address="bus1_navigation_out">
    <context context="navigation"/>
  </device>
  <device address="bus2_voice_command_out">
    <context context="voice_command"/>
  </device>
</group>

این نام گروه حجم باید با نام حجم تعریف شده در موتور CAP مطابقت داشته باشد. علاوه بر این، useFixedVolume نیز باید روی false تنظیم شود. برای جزئیات ، پرچم های AAOS پیکربندی صوتی را ببینید.

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

در اندروید 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 صوتی استاتیک استفاده می شود.

استراتژی های محصول موتور CAP

وقتی دستگاهی باید از موتور CAP برای مدیریت حجم یا مسیریابی استفاده کند، زمینه تعریف شده توسط OEM شما باید با تعریف استراتژی محصول موتور CAP مطابقت داشته باشد. اگر نه، می‌توانید از زمینه تعریف‌شده OEM بدون موتور CAP استفاده کنید.

برای کسب اطلاعات بیشتر، استراتژی محصول موتور CAP را در AAOS ببینید.

تنظیمات نواحی صوتی پویا

در 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 ایجاد می‌کند. پیام استثنا حاوی اطلاعات مربوطه در مورد اطلاعات مورد استفاده و حداقل نسخه مورد نیاز است.