Pemutar audio mendukung atribut yang menentukan cara sistem audio menangani pemilihan rute, volume, dan keputusan fokus untuk sumber yang ditentukan. Aplikasi dapat melampirkan atribut ke pemutaran audio (seperti musik yang diputar oleh layanan streaming atau notifikasi untuk email baru), lalu meneruskan atribut sumber audio ke framework, tempat sistem audio menggunakan atribut untuk membuat keputusan pencampuran dan untuk memberi tahu aplikasi tentang status sistem.
Di Android 4.4 dan yang lebih lama, framework membuat keputusan pencampuran hanya menggunakan jenis streaming audio. Namun, mendasarkan keputusan tersebut pada jenis streaming terlalu membatasi untuk menghasilkan output berkualitas di beberapa aplikasi dan perangkat. Misalnya, di perangkat seluler, beberapa aplikasi (yaitu Google Maps) memutar rute mobil pada jenis streaming STREAM_MUSIC; namun, di perangkat seluler dalam mode proyeksi (yaitu Android Auto), aplikasi tidak dapat menggabungkan rute mobil dengan streaming media lainnya.
Dengan menggunakan Audio Attribute API, aplikasi memberikan informasi mendetail tentang sumber audio tertentu kepada sistem audio, termasuk penggunaan (alasan sumber diputar), jenis konten (apa yang diputar sumber), flag (cara sumber diputar), dan konteks (baru di Android 9). Sintaksis:
AudioAttributes { mUsage mContentType mSource mFlags mTags / mFormattedTags / mBundle (key value pairs) }
- Penggunaan. Menentukan alasan sumber diputar dan mengontrol keputusan pemilihan rute, fokus, dan volume.
- Jenis konten. Menentukan apa yang diputar sumber (musik, film, ucapan, sonifikasi, tidak diketahui).
- Context. Nilai penggunaan yang diabstraksi ke HAL Audio.
- Flag. Menentukan cara sumber diputar. Mencakup dukungan untuk penegakan keterdengaran (suara shutter kamera diperlukan di beberapa negara) dan sinkronisasi audio/video hardware.
Untuk pemrosesan dinamika, aplikasi harus membedakan antara konten film, musik, dan ucapan. Informasi tentang data itu sendiri juga mungkin penting, seperti volume dan nilai sampel puncak.
Menggunakan atribut
Penggunaan menentukan konteks tempat streaming digunakan, yang memberikan informasi tentang alasan suara diputar dan tujuan penggunaan suara. Informasi penggunaan lebih ekspresif daripada jenis streaming dan memungkinkan kebijakan platform atau perutean untuk meningkatkan kualitas keputusan volume atau perutean.
Berikan salah satu nilai penggunaan berikut untuk instance apa pun:
- USAGE_UNKNOWN
- USAGE_MEDIA
- USAGE_VOICE_COMMUNICATION
- USAGE_VOICE_COMMUNICATION_SIGNALLING
- USAGE_ALARM
- USAGE_NOTIFICATION
- USAGE_NOTIFICATION_TELEPHONY_RINGTONE
- USAGE_NOTIFICATION_COMMUNICATION_REQUEST
- USAGE_NOTIFICATION_COMMUNICATION_INSTANT
- USAGE_NOTIFICATION_COMMUNICATION_DELAYED
- USAGE_NOTIFICATION_EVENT
- USAGE_ASSISTANCE_ACCESSIBILITY
- USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
- USAGE_ASSISTANCE_SONIFICATION
- USAGE_GAME
- USAGE_VIRTUAL_SOURCE
- USAGE_ASSISTANT
Nilai penggunaan atribut audio bersifat saling eksklusif. Untuk contoh, lihat
definisi
USAGE_MEDIA
dan
USAGE_ALARM
; untuk pengecualian, lihat
definisi
AudioAttributes.Builder
.
Jenis konten
Jenis konten menentukan jenis suara dan mengekspresikan kategori umum
konten seperti film, ucapan, atau bip/ringtone. Framework audio menggunakan
informasi jenis konten untuk mengonfigurasi blok pascapemrosesan
audio secara selektif. Meskipun memberikan jenis konten bersifat opsional, Anda harus menyertakan informasi
jenis setiap kali jenis konten diketahui, seperti menggunakan
CONTENT_TYPE_MOVIE
untuk layanan streaming film atau
CONTENT_TYPE_MUSIC
untuk aplikasi pemutaran musik.
Berikan salah satu nilai jenis konten berikut untuk instance apa pun:
CONTENT_TYPE_UNKNOWN
(default)CONTENT_TYPE_MOVIE
CONTENT_TYPE_MUSIC
CONTENT_TYPE_SONIFICATION
CONTENT_TYPE_SPEECH
Nilai jenis konten atribut audio bersifat saling eksklusif. Untuk mengetahui detail tentang jenis konten, lihat API atribut audio.
Konteks
Setiap suara di Android diidentifikasi oleh aplikasi yang bertanggung jawab dan alasan
untuk menghasilkan suara; dan perangkat Android menggunakan informasi ini untuk
menentukan cara menampilkan suara. Di Android 8.x dan yang lebih lama, aplikasi dapat
melaporkan alasan pembuatan suara menggunakan jenis streaming lama (misalnya
AudioSystem.STREAM_MUSIC
) atau AudioAttributes
. Di
Android 9, nilai AudioAttributes.usage
diabstrak pada tingkat HAL sebagai Konteks.
Konteks audio HAL | Penggunaan AudioAttributes |
---|---|
MUSIK | MEDIA |
VOICE_COMMAND | USAGE_ASSISTANT |
NAVIGASI | ASSISTANCE_NAVIGATION_GUIDANCE |
TELEPON | VOICE_COMMUNICATION |
RINGTONE | NOTIFICATION_RINGTONE |
NOTIFIKASI | NOTIFIKASI |
ALARM | ALARM |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
TIDAK DIKETAHUI | TIDAK DIKETAHUI |
Anda dapat memberikan salah satu nilai CONTEXT_NUMBER
berikut untuk instance
apa pun:
- MUSIC_CONTEXT // Pemutaran musik
- NAVIGATION_CONTEXT // Rute navigasi
- VOICE_COMMAND_CONTEXT // Sesi perintah suara
- CALL_RING_CONTEXT // Dering panggilan suara
- CALL_CONTEXT // Panggilan suara
- ALARM_CONTEXT // Suara alarm dari Android
- NOTIFICATION_CONTEXT // Notifikasi
- SYSTEM_SOUND_CONTEXT // Suara interaksi pengguna (klik tombol, dll.)
Tanda
Flag menentukan cara framework audio menerapkan efek ke pemutaran audio. Berikan satu atau beberapa flag berikut untuk instance:
FLAG_AUDIBILITY_ENFORCED
. Meminta sistem untuk memastikan keterdengaran suara. Gunakan untuk memenuhi kebutuhanSTREAM_SYSTEM_ENFORCED
lama (seperti memaksa suara shutter kamera).HW_AV_SYNC
. Meminta sistem untuk memilih aliran output yang mendukung sinkronisasi A/V hardware.
Flag atribut audio bersifat non-eksklusif dan dapat digabungkan. Untuk mengetahui detail tentang flag ini, lihat API atribut audio.
Contoh
Dalam contoh ini, AudioAttributes.Builder
menentukan
AudioAttributes
yang akan digunakan oleh instance AudioTrack
baru:
AudioTrack myTrack = new AudioTrack( new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .build(), myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);
Kompatibilitas
Developer aplikasi harus menggunakan atribut audio saat membuat atau mengupdate aplikasi untuk Android 5.0 dan yang lebih baru. Namun, aplikasi tidak diwajibkan untuk memanfaatkan atribut; aplikasi hanya dapat menangani jenis streaming lama atau tetap tidak mengetahui atribut (yaitu pemutar media generik yang tidak mengetahui apa pun tentang konten yang diputarnya).
Dalam kasus tersebut, framework mempertahankan kompatibilitas mundur dengan perangkat lama dan rilis Android dengan menerjemahkan jenis streaming audio lama ke atribut audio secara otomatis. Namun, framework ini tidak menerapkan atau menjamin pemetaan ini di seluruh perangkat, produsen, atau rilis Android.
Pemetaan kompatibilitas:
Android 5.0 dan yang lebih tinggi | Android 4.4 dan yang lebih lama |
---|---|
CONTENT_TYPE_SPEECH USAGE_VOICE_COMMUNICATION
|
STREAM_VOICE_CALL
|
CONTENT_TYPE_SONIFICATION USAGE_ASSISTANCE_SONIFICATION
|
STREAM_SYSTEM
|
CONTENT_TYPE_SONIFICATION USAGE_NOTIFICATION_RINGTONE
|
STREAM_RING
|
CONTENT_TYPE_MUSIC USAGE_UNKNOWN USAGE_MEDIA USAGE_GAME USAGE_ASSISTANCE_ACCESSIBILITY USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
|
STREAM_MUSIC
|
CONTENT_TYPE_SONIFICATION USAGE_ALARM
|
STREAM_ALARM
|
CONTENT_TYPE_SONIFICATION USAGE_NOTIFICATION USAGE_NOTIFICATION_COMMUNICATION_REQUEST USAGE_NOTIFICATION_COMMUNICATION_INSTANT USAGE_NOTIFICATION_COMMUNICATION_DELAYED USAGE_NOTIFICATION_EVENT
|
STREAM_NOTIFICATION
|
CONTENT_TYPE_SPEECH
|
(@hide) STREAM_BLUETOOTH_SCO
|
FLAG_AUDIBILITY_ENFORCED
|
(@hide) STREAM_SYSTEM_ENFORCED
|
CONTENT_TYPE_SONIFICATION USAGE_VOICE_COMMUNICATION_SIGNALLING
|
(@hide) STREAM_DTMF
|
Jenis streaming yang tidak digunakan lagi
Android 9 tidak lagi menggunakan jenis streaming berikut untuk penggunaan otomotif:
- STREAM_DEFAULT
- STREAM_VOICE_CALL
- STREAM_SYSTEM
- STREAM_RING
- STREAM_MUSIC
- STREAM_ALARM
- STREAM_NOTIFICATION
- STREAM_BLUETOOTH_SCO
- STREAM_SYSTEM_ENFORCED
- STREAM_DTMF
- STREAM_TTS
- STREAM_ACCESSIBILITY
Untuk mengetahui detail selengkapnya, lihat Audio Otomotif.