Pemutar audio mendukung atribut yang menentukan cara sistem audio menangani keputusan pemilihan rute, volume, dan fokus untuk sumber tertentu. Lamaran dapat menambahkan atribut ke pemutaran audio (seperti musik yang diputar oleh layanan streaming atau notifikasi untuk email baru), lalu meneruskan audio sumber ke framework, tempat sistem audio menggunakan atribut untuk membuat keputusan penggabungan dan memberi tahu aplikasi tentang status sistem file.
Di Android 4.4 dan versi sebelumnya, kerangka kerja membuat keputusan pencampuran hanya dengan menggunakan jenis streaming audio. Namun, mendasarkan keputusan tersebut pada jenis aliran terlalu untuk menghasilkan {i>output<i} berkualitas di berbagai aplikasi dan perangkat. Misalnya, pada perangkat seluler, beberapa aplikasi (yaitu Google Maps) memainkan petunjuk arah pada jenis aliran STREAM_MUSIC; tetapi, di perangkat seluler dalam mode proyeksi (yaitu Android Auto), aplikasi tidak dapat mencampur mengemudi arah dengan aliran media lain.
Menggunakan Audio Attribute API, aplikasi yang memberikan sistem audio detail informasi tentang sumber audio tertentu, termasuk penggunaan (mengapa sumber tersebut diputar), jenis konten (apa yang sedang diputar sumber), laporan (bagaimana sumbernya yang harus diputar), dan konteks (baru di Android 9). Syntax (Sintaks):
AudioAttributes { mUsage mContentType mSource mFlags mTags / mFormattedTags / mBundle (key value pairs) }
- Penggunaan. Menentukan alasan sumber diputar dan kontrolnya pemilihan rute, fokus, dan volume.
- Jenis konten. Menentukan apa yang diputar oleh sumber (musik, film, pidato, sonifikasi, tidak diketahui).
- Context. Nilai penggunaan diabstraksi ke HAL Audio.
- Tanda. Menentukan cara sumber harus diputar. Termasuk dukungan untuk penerapan audibilitas (suara shutter kamera diperlukan dalam di beberapa negara) dan sinkronisasi audio/video hardware.
Untuk pemrosesan dinamis, aplikasi harus membedakan antara film, musik, dan isi ucapan. Informasi tentang data itu sendiri juga penting, seperti kenyaringan dan nilai sampel puncak.
Menggunakan atribut
Penggunaan menentukan konteks penggunaan streaming, sehingga informasi tentang alasan suara tersebut diputar dan untuk apa suara tersebut digunakan. Informasi penggunaan lebih ekspresif daripada jenis streaming dan memungkinkan platform atau kebijakan {i>routing<i} untuk menyempurnakan keputusan volume atau {i>routing<i}.
Sediakan salah satu nilai penggunaan berikut untuk instance apa pun:
- PENGGUNAAN_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_ berdampak pada keterlambatan
- USAGE_NOTIFICATION_EVENT
- USAGE_ASSISTANCE_ACCESSIBILITY
- USAGE_ASSISTANCE_NAVIGATION_{/1}
- USAGE_ASSISTANCE_SONIFICATION
- GAME_USAGE
- USAGE_VIRTUAL_SOURCE
- USAGE_ASSISTANT
Nilai penggunaan atribut audio sama-sama bersifat eksklusif. Lihat contoh,
USAGE_MEDIA
dan
USAGE_ALARM
definisi; untuk pengecualian, lihat
AudioAttributes.Builder
definisi.
Jenis konten
Jenis konten menentukan suara dan kategori umum dari
konten seperti film, ucapan, atau bunyi bip/nada. Framework audio menggunakan
informasi jenis konten untuk mengonfigurasi pascapemrosesan audio secara selektif
blok. Meskipun memberikan jenis konten bersifat opsional, Anda harus menyertakan jenis
informasi tertentu kapan pun jenis kontennya diketahui, seperti menggunakan
CONTENT_TYPE_MOVIE
untuk layanan streaming film atau
CONTENT_TYPE_MUSIC
untuk aplikasi pemutaran musik.
Sediakan 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 sama-sama bersifat eksklusif. Untuk detail tentang jenis konten, lihat audio API atribut tambahan.
Konteks
Setiap suara di Android diidentifikasi oleh aplikasi dan alasan yang bertanggung jawab
untuk menghasilkan suara; dan perangkat Android menggunakan
informasi ini untuk
menentukan cara menyajikan suara. Di Android 8.x dan yang lebih rendah, aplikasi dapat
melaporkan alasan pembuatan suara menggunakan jenis streaming lama (mis.
AudioSystem.STREAM_MUSIC
) atau AudioAttributes
. Di beberapa
Android 9, nilai AudioAttributes.usage
diabstraksi di tingkat HAL sebagai Konteks.
Konteks audio HAL | Penggunaan AudioAttributes |
---|---|
MUSIK | MEDIA |
VOICE_COMMAND | USAGE_ASSISTANT |
NAVIGASI | ASSISTANCE_NAVIGATION_PANDUAN |
TELEPON | VOICE_COMMUNICATION |
RINGKASAN | NOTIFIKASI_RINGTONE |
NOTIFIKASI | NOTIFIKASI |
ALARM | ALARM |
SUARA_SISTEM | ASSISTANCE_SONIFICATION |
TIDAK DIKETAHUI | TIDAK DIKETAHUI |
Anda dapat memberikan salah satu nilai CONTEXT_NUMBER
berikut untuk setiap
:
- MUSIC_CONTEXT // Pemutaran musik
- NAVIGATION_CONTEXT // Petunjuk navigasi
- VOICE_COMMAND_CONTEXT // Sesi perintah suara
- CALL_RING_CONTEXT // Panggilan suara berdering
- CALL_CONTEXT // Panggilan suara
- ALARM_CONTEXT // Suara alarm dari Android
- NOTIFICATION_CONTEXT // Notifikasi
- SYSTEM_SOUND_CONTEXT // Suara interaksi pengguna (klik tombol, dsb.)
Tanda
Tanda menentukan cara framework audio menerapkan efek ke pemutaran audio. Sediakan satu atau beberapa flag berikut untuk sebuah instance:
FLAG_AUDIBILITY_ENFORCED
. Meminta sistem untuk memastikan audibilitas suara. Digunakan untuk memenuhi kebutuhan layanan lamaSTREAM_SYSTEM_ENFORCED
(seperti memaksakan suara shutter kamera).HW_AV_SYNC
. Meminta sistem memilih streaming output yang mendukung sinkronisasi perangkat keras A/V.
Tanda atribut audio bersifat non-eksklusif dan dapat digabungkan. Untuk mengetahui detail tentang penanda ini, lihat audio API atribut tambahan.
Contoh
Dalam contoh ini, AudioAttributes.Builder
menentukan
AudioAttributes
untuk digunakan oleh 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 tinggi. Namun, aplikasi tidak yang diperlukan untuk memanfaatkan atribut; mereka dapat menangani jenis streaming lama saja atau tetap tidak menyadari keberadaan atribut (yaitu pemutar media umum yang tidak tahu apa pun tentang konten yang diputar).
Dalam kasus tersebut, framework mempertahankan kompatibilitas mundur dengan versi lama perangkat dan rilis Android dengan menerjemahkan streaming audio lama secara otomatis jenis ke atribut audio. Namun, kerangka kerja 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
|
(@sembunyikan) STREAM_BLUETOOTH_SCO
|
FLAG_AUDIBILITY_ENFORCED
|
(@sembunyikan) STREAM_SYSTEM_ENFORCED
|
CONTENT_TYPE_SONIFICATION USAGE_VOICE_COMMUNICATION_SIGNALLING
|
(@sembunyikan) STREAM_DTMF
|
Jenis aliran data yang tidak digunakan lagi
Android 9 menghentikan penggunaan jenis aliran data berikut untuk penggunaan otomotif:
- STREAM_DEFAULT
- STREAM_VOICE_CALL
- SISTEM_STREAM
- CINCIN_STREAMING
- STREAM_MUSIK
- STREAM_ALARM
- STREAM_NOTIFICATION
- STREAM_BLUETOOTH_SCO
- STREAM_SYSTEM_ENFORCED
- STREAM_DTMF
- STREAM_TTS
- STREAM_ACCESSIBILITY
Untuk detail selengkapnya, lihat Audio Otomotif.