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.
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 |
NAVIGASI | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
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 IDPRIMARY_AUDIO_ZONE
. JikaisPrimary="true"
ditentukan,audioZoneId
tidak diperlukan.Nomor
audioZoneId
danoccupantZoneId
tidak dapat diulang.audioZoneId
danoccupantZoneId
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
berisiAUDIO_USAGE_MEDIA
danAUDIO_USAGE_UNKNOWN
- Konteks
game
hanya berisiAUDIO_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.