Konfigurasi audio mobil

Di Android 10, car_audio_configuration.xml menggantikan car_volumes_groups.xml dan IAudioControl.getBusForContext . File kebijakan audio, biasanya terdapat di partisi vendor, mewakili konfigurasi perangkat keras audio board. Semua perangkat yang direferensikan dalam car_audio_configuration.xml harus ditentukan dalam audio_policy_configuration.xml .

Gambar 1 di bawah mengilustrasikan ikhtisar tingkat tinggi arsitektur layanan audio mobil di mana layanan audio mobil membaca file konfigurasi audio mobil guna menyiapkan audio untuk perangkat.

Ikhtisar arsitektur audio mobil

Gambar 1. Ikhtisar arsitektur audio mobil.

Tempatkan file konfigurasi audio mobil di vendor\etc\ atau system\etc\ pada perangkat, dengan vendor\etc\ menjadi tempat pertama pencarian file oleh layanan audio mobil. Layanan audio mobil membaca car_audio_configuration.xml untuk menentukan konfigurasi audio.

Zona audio mobil:

  • Setiap zona audio berisi ID zona audio unik.
  • Setiap zona audio dapat dipetakan ke zona penghuni.
  • Tindakan audio di setiap zona tidak bergantung satu sama lain:

    • Fokus audio
    • Perutean audio
    • Audio merunduk
  • Kelompok volume mobil:

    • Semua perangkat audio yang berisi grup volume dikontrol bersama dengan perubahan penguatan yang sama. Konfigurasi penguatan audio untuk semua perangkat dalam grup harus sama.

    • Konteks audio ke pemetaan perangkat audio. Gunakan ini untuk membuat campuran audio yang memetakan penggunaan audio ke perangkat output.

    • Semua konteks audio harus diwakili dalam suatu zona. Hal ini memungkinkan perutean audio diatur secara akurat untuk semua penggunaan atribut audio.

Konteks audio

Untuk menyederhanakan konfigurasi audio AAOS, penggunaan serupa telah dikelompokkan ke dalam CarAudioContexts . Konteks audio ini digunakan di seluruh CarAudioService untuk menentukan perutean, grup volume, fokus audio, dan manajemen pengecilan. Konteks audio statis di AAOS tercantum di bawah.

Tabel ini menjelaskan pemetaan antara konteks dan penggunaan audio. Baris yang disorot disediakan untuk penggunaan sistem baru.

Konteks Audio Mobil Penggunaan Atribut Terkait
MUSIK UNKNOWN
GAME
MEDIA
NAVIGASI ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
PANGGILAN_RING NOTIFICATION_RINGTONE
PANGGILAN VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
PEMBERITAHUAN NOTIFICATION
NOTIFICATION_*
SISTEM_SUARA ASSISTANCE_SONIFICATION
KEADAAN DARURAT EMERGENCY
KEAMANAN SAFETY
KENDARAAN_STATUS VEHICLE_STATUS
PENGUMUMAN ANNOUNCEMENT

Aktifkan perutean AAOS

Untuk menggunakan perutean berbasis AAOS, Anda harus menyetel tanda audioUseDynamicRouting ke true :

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

Ketika false , perutean dan sebagian besar CarAudioService , dinonaktifkan dan AAOS kembali ke perilaku default AudioService .

Zona primer

Secara default, semua audio dialihkan ke zona utama. Hanya ada satu zona utama, yang ditunjukkan dalam konfigurasi dengan atribut isPrimary="true" . Zona utama secara otomatis ditetapkan Audiomanager.PRIMARY_AUDIO_ZONE .

Konfigurasi sampel (versi 2)

Misalnya, sebuah kendaraan mungkin memiliki dua zona, zona utama dan sistem hiburan kursi belakang. Dalam skenario ini, Anda dapat merancang kemungkinan car_audio_configuration.xml versi 2 sebagai berikut:

<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>

Dalam contoh ini, zona utama memisahkan beberapa konteks audio ke perangkat berbeda. Hal ini memungkinkan HAL untuk menerapkan efek pasca-pemrosesan yang berbeda dan menggabungkan keluaran pada setiap perangkat dengan menggunakan perangkat keras kendaraan. Perangkat telah disusun menjadi beberapa kelompok volume: media, navigasi, panggilan, alarm, dan suara sistem. Jika sistem dikonfigurasikan untuk useFixedVolume , maka level volume untuk setiap grup diteruskan ke HAL untuk diterapkan pada output perangkat ini.

Untuk zona utama, kami merekomendasikan agar suara sistem terpisah dari suara lainnya. Hal ini memungkinkan suara kendaraan diperlakukan dengan prioritas lebih tinggi. Layanan audio mobil telah membedakan suara kendaraan dalam hal fokus dan manajemen merunduk. Misalnya, permintaan fokus suara darurat memiliki prioritas lebih tinggi dibandingkan permintaan fokus lainnya.

Sederhananya, dalam contoh zona sekunder, semua konteks audio dirutekan ke satu perangkat dan satu grup volume.

Konfigurasi audio zona penghuni

Di Android 11, car_audio_configuration.xml memperkenalkan dua kolom baru, audioZoneId dan occupantZoneId . Anda dapat menggunakan audioZoneId untuk mengontrol manajemen zona audio. Anda dapat menggunakan occupantZoneId untuk mengonfigurasi perutean berdasarkan ID pengguna.

Meninjau kembali konfigurasi audio di atas, namun memanfaatkan bidang baru untuk pemetaan id zona penghuni dan id zona audio, konfigurasi baru tanpa definisi grup volume dapat diatur sebagai berikut.

<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>

Konfigurasi di atas mendefinisikan pemetaan untuk zona utama ke zona penghuni 0 dan audioZoneId 1 ke occupantZoneId 1. Secara umum, pemetaan apa pun antara zona penghuni dan zona audio dapat dikonfigurasi. Namun pemetaannya harus one-to-one. Aturan yang mendefinisikan dua bidang baru tercantum di bawah.

  • audioZoneId untuk zona utama selalu berupa id PRIMARY_AUDIO_ZONE . Jika isPrimary="true" ditentukan, maka audioZoneId tidak diperlukan.

  • nomor audioZoneId dan occupantZoneId tidak dapat diulang.

  • audioZoneId dan occupantZoneId hanya dapat memiliki pemetaan satu-ke-satu.

Konfigurasi audio mobil Android 14

Di Android 14, AAOS memperkenalkan layanan plugin OEM, yang memungkinkan Anda mengelola perilaku audio secara lebih aktif yang diawasi oleh layanan audio mobil. Seiring dengan layanan plugin baru, perubahan berikut ditambahkan ke file konfigurasi audio mobil:

  • Konteks audio mobil yang ditentukan OEM
  • Konfigurasi dinamis zona non-primer

Konteks audio mobil yang ditentukan OEM

Untuk mengaktifkan konfigurasi audio yang fleksibel, di Android 14, layanan audio mobil memungkinkan penggunaan audio dikelompokkan secara berbeda dari konteks Audio statis yang ditentukan di atas. Konteks yang ditentukan OEM ini dapat ditentukan dalam file car_audio_configuration.xml versi 3.

Sebaliknya, konteks audio statis yang ditentukan saat ini digunakan. Format umum konteks audio mobil yang ditentukan OEM ditunjukkan di bawah ini.

Konteks OEM masing-masing memerlukan name beserta daftar penggunaan atribut audio yang ditetapkan ke konteks tersebut. Dalam contoh di atas, dua konteks didefinisikan:

<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>
...
  • konteks media berisi AUDIO_USAGE_MEDIA dan AUDIO_USAGE_UNKNOWN
  • konteks game hanya berisi AUDIO_USAGE_GAME

Konteksnya harus ditentukan di bagian atas file car_audio_configuration.xml . Ketika konteks OEM ditentukan, konfigurasi audio mobil lainnya dapat dilanjutkan seperti sebelumnya. Aturan berikut berlaku untuk konteks audio mobil:

  • Definisi konteks OEM bersifat opsional. Konteks Audio statis digunakan sebagai gantinya.

  • Jangan ulangi nama konteks.

  • Jangan tetapkan penggunaan atribut audio ke beberapa konteks.

  • Semua penggunaan audio yang ditentukan dalam AudioAttributes harus digunakan untuk membangun konteks.

Sebenarnya, representasi string android.audio.policy.configuration.V7_0.AudioUsage dari penggunaan audio harus digunakan untuk definisi konteks audio OEM. Di masa mendatang, penggunaan atribut audio yang lebih baru akan ditetapkan ke konteks yang paling sesuai untuk mengurangi kesalahan saat bermigrasi dari satu versi Android ke versi lainnya.

Meskipun konteks yang ditentukan OEM diperkenalkan untuk lebih memperluas layanan audio plugin OEM, konteks tersebut masih dapat digunakan tanpa layanan plugin OEM. Perilaku audio mirip dengan layanan audio statis:

  • Interaksi fokus audio. Atribut audio digunakan untuk menentukan perilaku pencocokan terbaik seperti yang diatur oleh matriks interaksi fokus audio. Untuk detailnya, lihat Fokus audio .

  • Atribut audio kontrol volume audio digunakan untuk menentukan pencocokan terbaik:

    • Grup volume berdasarkan konteks yang ditentukan OEM.
    • Prioritas dari daftar volume statis dikonfigurasi.
  • Perilaku merunduk audio:

    • Penggunaan atribut audio untuk fokus audio saat ini digunakan untuk memetakan informasi perangkat audio output seperti yang ditentukan dalam file konfigurasi audio mobil.

    • Atribut audio digunakan untuk memetakan konteks statis yang sesuai ke bebek, berdasarkan matriks pengecilan audio statis.

Konfigurasi zona audio dinamis

Di Android 14, untuk mengakomodasi konfigurasi zona audio dinamis, skema konfigurasi audio mobil untuk menentukan zona audio juga diperbarui ke versi 3. Skema baru ini memerlukan konfigurasi yang disiapkan untuk setiap zona.

<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>

Untuk mempelajari lebih lanjut, lihat file versi 3 yang ditentukan di device/generic/car/emulator/audio/car_audio_configuration.xml . Mulai Android 14, zona utama hanya dapat memiliki satu (1) konfigurasi. Zona non-primer dapat memiliki beberapa konfigurasi. Aturan berikut ini berlaku untuk konfigurasi audio mobil:

  • Zona audio utama hanya dapat memiliki satu konfigurasi.

  • Zona audio non-primer dapat memiliki beberapa konfigurasi.

  • Nama harus unik untuk setiap zona audio dan konfigurasi zona audio.

  • Dalam zona audio, konfigurasi audio mungkin berbeda:

    • Pengaturan grup volume tidak harus sama.
    • Penetapan konteks audio tidak harus sama.
  • Nama perangkat output audio harus unik di seluruh zona atau konfigurasi. Nama perangkat hanya akan muncul sekali dalam konfigurasi audio atau zona.

  • Perangkat audio yang termasuk dalam grup volume yang sama harus memiliki konfigurasi penguatan audio yang sama.

  • Semua konteks audio (OEM atau statis) harus ditetapkan untuk setiap konfigurasi audio.

Kompatibilitas ke depan

Meskipun versi baru car_audio_configuration.xml memperkenalkan fitur baru di setiap pembaruan, Anda masih dapat menggunakan file lama di versi AAOS yang lebih baru. OEM yang mengupdate ke versi baru Android dapat menggunakan kembali file car_audio_configuration.xml .

Untuk menggunakan fitur baru yang memerlukan informasi baru yang terdapat di car_audio_configuration.xml , versinya harus diperbarui. Mencoba menggunakan versi file yang lebih lama dengan informasi yang tidak didukung dalam versi file tersebut akan memunculkan IllegalStateException saat layanan mobil dimulai. Pesan pengecualian berisi informasi relevan tentang informasi mana yang digunakan dan versi minimum yang diperlukan.