Konfigurasi audio mobil

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

Gambar 1 di bawah mengilustrasikan ringkasan umum arsitektur layanan audio mobil tempat layanan audio mobil membaca file konfigurasi audio mobil untuk menyiapkan audio untuk perangkat.

Ringkasan arsitektur audio mobil

Gambar 1. Ringkasan arsitektur audio mobil.

Tempatkan file konfigurasi audio mobil di vendor\etc\ atau system\etc\ di perangkat, dengan vendor\etc\ menjadi tempat pertama yang ditelusuri 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 yang unik.
  • Setiap zona audio dapat dipetakan ke zona penumpang.
  • Tindakan audio di setiap zona tidak saling memengaruhi:

    • Fokus audio
    • Pemilihan rute audio
    • Pengecilan volume audio
  • Grup volume mobil:

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

    • Pemetaan konteks audio ke perangkat audio. Gunakan ini untuk membuat campuran audio yang memetakan penggunaan audio ke perangkat output.

    • Semua konteks audio harus direpresentasikan dalam zona. Hal ini memungkinkan pemilihan rute audio disiapkan 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 pemilihan rute, grup volume, fokus audio, dan pengelolaan ducking. Konteks audio statis di AAOS tercantum di bawah.

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

CarAudioContext Associated AttributeUsages
MUSIK UNKNOWN
GAME
MEDIA
NAVIGASI ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
TELEPON VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
NOTIFIKASI NOTIFICATION
NOTIFICATION_*
SYSTEM_SOUND ASSISTANCE_SONIFICATION
DARURAT EMERGENCY
KEAMANAN SAFETY
VEHICLE_STATUS VEHICLE_STATUS
PENGUMUMAN ANNOUNCEMENT

Mengaktifkan pemilihan rute AAOS

Untuk menggunakan pemilihan rute berbasis AAOS, Anda harus menetapkan flag audioUseDynamicRouting ke true:

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

Jika false, pemilihan rute, dan sebagian besar CarAudioService dinonaktifkan, AAOS akan kembali ke perilaku default AudioService.

Zona utama

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

Contoh konfigurasi (versi 2)

Misalnya, kendaraan mungkin memiliki dua zona, zona utama dan sistem hiburan kursi belakang. Dalam skenario ini, Anda dapat mendesain 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 yang berbeda. Hal ini memungkinkan HAL menerapkan efek pascapemrosesan yang berbeda dan untuk menggabungkan output di setiap perangkat menggunakan hardware kendaraan. Perangkat telah diatur ke dalam beberapa grup volume: media, navigasi, panggilan, alarm, dan suara sistem. Jika sistem dikonfigurasi ke useFixedVolume, level volume untuk setiap grup akan diteruskan ke HAL untuk diterapkan ke output perangkat ini.

Untuk zona utama, sebaiknya suara sistem terpisah dari suara lainnya. Hal ini memungkinkan suara kendaraan diperlakukan dengan prioritas yang lebih tinggi. Layanan audio mobil sudah membuat perbedaan ini untuk suara kendaraan dalam hal fokus dan manajemen peredam suara. Misalnya, permintaan fokus suara darurat memiliki prioritas yang lebih tinggi daripada permintaan fokus lainnya.

Agar tetap sederhana, dalam contoh zona sekunder, semua konteks audio diarahkan ke satu perangkat dan satu grup volume.

Konfigurasi audio zona penumpang

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

Melihat kembali konfigurasi audio di atas, tetapi menggunakan kolom baru untuk ID zona penghuni dan pemetaan ID zona audio, konfigurasi baru tanpa definisi grup volume dapat disiapkan 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 menentukan pemetaan untuk zona primer ke zona penghuni 0 dan audioZoneId 1 ke occupantZoneId 1. Secara umum, setiap pemetaan antara zona penghuni dan zona audio dapat dikonfigurasi. Namun, pemetaan harus satu-ke-satu. Aturan yang menentukan dua kolom baru tercantum di bawah.

  • audioZoneId untuk zona utama selalu berupa ID PRIMARY_AUDIO_ZONE. Jika isPrimary="true" ditentukan, 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. Bersama dengan layanan plugin baru, perubahan berikut ditambahkan ke file konfigurasi audio mobil:

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

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.

Sebagai gantinya, konteks audio statis yang saat ini ditentukan akan digunakan. Format umum konteks audio mobil yang ditentukan OEM ditampilkan di bawah.

Setiap konteks OEM memerlukan name beserta daftar penggunaan atribut audio yang ditetapkan ke konteks. Pada contoh di atas, dua konteks ditentukan:

<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

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

  • Definisi konteks OEM bersifat opsional. Sebagai gantinya, Konteks audio statis digunakan.

  • Jangan ulangi nama konteks.

  • Jangan menetapkan penggunaan atribut audio ke beberapa konteks.

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

Secara khusus, representasi string android.audio.policy.configuration.V7_0.AudioUsage 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 error 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 menyerupai layanan audio statis:

  • Interaksi fokus audio. Atribut audio digunakan untuk menentukan perilaku pencocokan terbaik seperti yang disiapkan oleh matriks interaksi fokus audio. Untuk mengetahui 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 yang dikonfigurasi.
  • Perilaku pengecilan volume audio:

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

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

Konfigurasi zona audio dinamis

Di Android 14, untuk mengakomodasi konfigurasi zona audio dinamis, skema konfigurasi audio mobil untuk menentukan zona audio juga diupdate ke versi 3. Skema baru 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-utama dapat memiliki beberapa konfigurasi. Aturan berikut berlaku untuk konfigurasi audio mobil:

  • Zona audio utama hanya dapat memiliki satu konfigurasi.

  • Zona audio non-utama dapat memiliki beberapa konfigurasi.

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

  • Dalam zona audio, konfigurasi audio dapat berbeda:

    • Penyiapan 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 boleh muncul sekali dalam konfigurasi atau zona audio.

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

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

Kompatibilitas dengan versi baru

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

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