Konfigurasi audio mobil

Di Android 10, car_audio_configuration.xml diganti car_volumes_groups.xml dan IAudioControl.getBusForContext. Kebijakan audio file, biasanya terdapat dalam partisi vendor, mewakili hardware audio konfigurasi board. Semua perangkat yang dirujuk di car_audio_configuration.xml harus ditetapkan di audio_policy_configuration.xml.

Gambar 1 di bawah mengilustrasikan ringkasan tingkat tinggi tentang layanan audio mobil arsitektur di mana layanan audio mobil membaca konfigurasi audio mobil untuk menyiapkan audio bagi 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 menelusuri file oleh layanan audio mobil. Mobil layanan audio membacakan car_audio_configuration.xml untuk menentukan audio konfigurasi Anda.

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

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

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

    • Pemetaan konteks audio ke perangkat audio. Gunakan ini untuk membuat audio yang memetakan penggunaan audio ke perangkat {i>output<i}.

    • Semua konteks audio harus ditampilkan dalam satu zona. Hal ini memungkinkan agar perutean 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 dalam CarAudioService untuk menentukan pemilihan rute, grup volume, fokus audio, dan pengecilan volume otomatisasi pengelolaan biaya. Konteks audio statis di AAOS tercantum di bawah ini.

Tabel ini menjelaskan pemetaan antara konteks audio dan penggunaan. Disoroti baris disediakan untuk penggunaan sistem baru.

Konteks MobilAudio AttributeUsages Terkait
MUSIK UNKNOWN
GAME
MEDIA
NAVIGASI ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
CINCIN_PANGGILAN NOTIFICATION_RINGTONE
TELEPON VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
NOTIFIKASI NOTIFICATION
NOTIFICATION_*
SUARA_SISTEM ASSISTANCE_SONIFICATION
DARURAT EMERGENCY
KEAMANAN SAFETY
STATUS_VEHICLE VEHICLE_STATUS
PENGUMUMAN ANNOUNCEMENT

Mengaktifkan pemilihan rute AAOS

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

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

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

Zona utama

Secara default, semua audio dirutekan ke zona utama. Hanya satu zona utama ada, yang ditunjukkan dalam konfigurasi dengan 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 kursi belakang hiburan. Dalam skenario ini, Anda dapat merancang 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>

Di contoh ini, zona utama memisahkan beberapa konteks audio ke perangkat yang berbeda. Hal ini memungkinkan HAL menerapkan proses pascapemrosesan yang berbeda efek dan untuk mencampur {i>output<i} pada setiap perangkat dengan menggunakan perangkat keras kendaraan. Perangkat telah disusun menjadi beberapa grup volume: media, navigasi, panggilan, alarm, dan suara sistem. Jika sistem dikonfigurasi untuk useFixedVolume, maka level volume untuk setiap grup diteruskan ke HAL untuk diterapkan ke output perangkat ini.

Untuk zona utama, sebaiknya suara sistem terpisah dari suara lainnya audio. Dengan begitu, suara kendaraan dapat ditangani dengan prioritas yang lebih tinggi. Layanan audio mobil sudah membuat perbedaan untuk suara kendaraan di dalam hal fokus dan manajemen pengecilan volume. Misalnya, fokus suara darurat memiliki prioritas lebih tinggi daripada permintaan fokus lainnya.

Agar lebih 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 perutean berdasarkan ID pengguna.

Meninjau kembali konfigurasi audio di atas, tetapi memanfaatkan bidang baru untuk pemetaan ID zona penumpang dan 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 utama ke zona penghuni 0 dan audioZoneId 1 hingga occupantZoneId 1. Secara umum, setiap pemetaan antara zona penumpang dan zona audio dapat dikonfigurasi. Namun, pemetaan harus satu ke satu. Aturan yang menentukan dua kolom baru tersebut tercantum di bawah.

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

  • Nomor audioZoneId dan occupantZoneId tidak dapat diulang.

  • audioZoneId dan occupantZoneId hanya dapat memiliki pemetaan one-to-one.

Konfigurasi audio mobil Android 14

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

  • Konteks audio mobil yang ditentukan OEM
  • Konfigurasi dinamis non-zona 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 dengan Konteks audio statis yang dijelaskan di atas. Konteks yang ditentukan OEM ini dapat ditentukan di car_audio_configuration.xml file versi 3.

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

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

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

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

  • Definisi konteks OEM bersifat opsional. Konteks audio statis adalah 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 membuat konteks.

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

Sementara konteks yang ditentukan OEM diperkenalkan untuk lebih memperluas plugin OEM layanan audio, audio tersebut tetap dapat digunakan tanpa layanan plugin OEM. Audio terlihat menyerupai layanan audio statis:

  • Interaksi fokus audio. Atribut audio digunakan untuk menentukan konten perilaku yang sesuai seperti yang disiapkan oleh matriks interaksi fokus audio. Sebagai Lihat detail Fokus audio.

  • Atribut audio kontrol volume audio digunakan untuk menentukan kecocokan 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 output informasi perangkat audio seperti yang ditentukan dalam konfigurasi audio mobil .

    • Atribut audio digunakan untuk memetakan konteks statis terkait ke bebek, berdasarkan matriks pengecilan volume audio statis.

Konfigurasi zona audio dinamis

Di Android 14, untuk mengakomodasi zona audio dinamis , skema konfigurasi audio mobil untuk menentukan zona audio juga diperbarui ke versi 3. Skema baru memerlukan konfigurasi penyiapan 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 didefinisikan di device/generic/car/emulator/audio/car_audio_configuration.xml. Dimulai dalam Android 14, zona utama hanya dapat memiliki satu (1) konfigurasi Anda. Zona non-utama dapat memiliki beberapa konfigurasi. Hal berikut aturan yang 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 mungkin berbeda:

    • Penyiapan grup volume tidak harus sama.
    • Penetapan konteks audio tidak harus sama.
  • Nama perangkat output audio harus unik di seluruh zona atau konfigurasi. J nama perangkat seharusnya hanya muncul sekali dalam konfigurasi atau zona audio.

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

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

Kompatibilitas dengan versi baru

Meskipun versi baru car_audio_configuration.xml memperkenalkan di setiap pembaruan, Anda masih dapat menggunakan file lama dalam AAOS. OEM yang melakukan update ke versi baru Android dapat menggunakan kembali File car_audio_configuration.xml.

Untuk menggunakan fitur baru yang memerlukan informasi baru yang terdapat dalam car_audio_configuration.xml, versinya harus diupdate. Mencoba menggunakan versi file yang lebih lama dengan informasi yang tidak didukung dalam versi file tersebut menampilkan IllegalStateException saat servis mobil dimulai. Pengecualian berisi informasi yang relevan tentang informasi mana yang digunakan dan versi minimum yang diperlukan.