Pemutar audio mendukung atribut yang menentukan cara sistem audio menangani keputusan perutean, volume, dan fokus untuk sumber tertentu. Aplikasi dapat melampirkan atribut ke pemutaran audio (seperti musik yang diputar oleh layanan streaming atau pemberitahuan untuk email baru) lalu meneruskan atribut sumber audio ke kerangka kerja, di mana sistem audio menggunakan atribut tersebut untuk membuat keputusan pencampuran dan untuk memberi tahu aplikasi tentang keadaan sistem.
Di Android 4.4 dan yang lebih lama, framework ini membuat keputusan pencampuran hanya dengan menggunakan jenis streaming audio. Namun, mendasarkan keputusan tersebut pada jenis aliran terlalu membatasi untuk menghasilkan keluaran berkualitas di berbagai aplikasi dan perangkat. Misalnya, pada perangkat seluler, beberapa aplikasi (yaitu Google Maps) memutar petunjuk arah mengemudi pada jenis aliran STREAM_MUSIC; namun, pada perangkat seluler dalam mode proyeksi (yaitu Android Auto), aplikasi tidak dapat menggabungkan petunjuk arah mengemudi dengan aliran media lainnya.
Dengan menggunakan API Atribut Audio , aplikasi menyediakan sistem audio dengan informasi terperinci tentang sumber audio tertentu, termasuk penggunaan (mengapa sumber diputar), jenis konten (apa yang diputar oleh sumber), tanda (bagaimana sumber harus 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 perutean, fokus, dan volume.
- Jenis konten . Menentukan sumber yang sedang diputar (musik, film, ucapan, sonifikasi, tidak diketahui).
- Konteks . Nilai penggunaan disarikan ke Audio HAL.
- Bendera . Menentukan bagaimana sumber harus diputar. Termasuk dukungan untuk penerapan audibilitas (suara rana kamera diperlukan di beberapa negara) dan sinkronisasi audio/video perangkat keras.
Untuk pemrosesan dinamika, aplikasi harus membedakan antara konten film, musik, dan ucapan. Informasi tentang data itu sendiri juga penting, seperti tingkat kenyaringan dan nilai sampel puncak.
Gunakan atribut
Penggunaan menentukan konteks penggunaan aliran, memberikan informasi tentang alasan suara diputar dan untuk apa suara tersebut digunakan. Informasi penggunaan lebih ekspresif dibandingkan jenis aliran dan memungkinkan platform atau kebijakan perutean untuk menyempurnakan 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 eksklusif. Sebagai contoh, lihat definisi USAGE_MEDIA
dan USAGE_ALARM
; untuk pengecualian, lihat definisi AudioAttributes.Builder
.
Jenis konten
Tipe konten menentukan suara dan menyatakan kategori umum konten seperti film, ucapan, atau bip/nada dering. Kerangka kerja audio menggunakan informasi tipe konten untuk secara selektif mengonfigurasi blok pasca-pemrosesan audio. Meskipun penyediaan tipe konten bersifat opsional, Anda harus menyertakan informasi tipe setiap kali tipe konten diketahui, seperti menggunakan CONTENT_TYPE_MOVIE
untuk layanan streaming film atau CONTENT_TYPE_MUSIC
untuk aplikasi pemutaran musik.
Berikan salah satu nilai tipe konten berikut untuk instans apa pun:
-
CONTENT_TYPE_UNKNOWN
(bawaan) -
CONTENT_TYPE_MOVIE
-
CONTENT_TYPE_MUSIC
-
CONTENT_TYPE_SONIFICATION
-
CONTENT_TYPE_SPEECH
Nilai tipe konten atribut audio saling eksklusif. Untuk detail tentang tipe konten, lihat API atribut audio .
Konteks
Setiap suara di Android diidentifikasi oleh aplikasi yang bertanggung jawab dan alasan pembuatan suara tersebut; 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 aliran lama (misalnya AudioSystem.STREAM_MUSIC
) atau AudioAttributes
. Di Android 9, nilai AudioAttributes.usage
diabstraksi pada level HAL sebagai Contexts .
konteks audio HAL | Penggunaan AudioAttributes |
---|---|
MUSIK | MEDIA |
VOICE_COMMAND | USAGE_ASSISTANT |
NAVIGASI | ASSISTANCE_NAVIGATION_GUIDANCE |
PANGGILAN | VOICE_COMMUNICATION |
NADA DERING | NOTIFICATION_RINGTONE |
PEMBERITAHUAN | PEMBERITAHUAN |
ALARM | ALARM |
SISTEM_SUARA | ASSISTANCE_SONIFICATION |
TIDAK DIKENAL | TIDAK DIKENAL |
Anda dapat memberikan salah satu dari CONTEXT_NUMBER
nilai berikut untuk instance apa pun:
- MUSIC_CONTEXT // Pemutaran musik
- NAVIGATION_CONTEXT // Arah navigasi
- VOICE_COMMAND_CONTEXT // Sesi perintah suara
- CALL_RING_CONTEXT // Panggilan suara berdering
- CALL_CONTEXT // Panggilan suara
- ALARM_CONTEXT // Bunyi alarm dari Android
- NOTIFICATION_CONTEXT // Pemberitahuan
- SYSTEM_SOUND_CONTEXT // Suara interaksi pengguna (klik tombol, dll)
Bendera
Bendera menentukan bagaimana kerangka audio menerapkan efek pada pemutaran audio. Berikan satu atau lebih tanda berikut untuk sebuah instans:
-
FLAG_AUDIBILITY_ENFORCED
. Meminta sistem untuk memastikan audibilitas suara. Gunakan untuk memenuhi kebutuhanSTREAM_SYSTEM_ENFORCED
lama (seperti memaksa suara rana kamera). -
HW_AV_SYNC
. Meminta sistem untuk memilih aliran keluaran yang mendukung sinkronisasi A/V perangkat keras.
Tanda atribut audio bersifat non-eksklusif dan dapat digabungkan. Untuk mengetahui detail tentang tanda ini, lihat API atribut audio .
Contoh
Dalam contoh ini, AudioAttributes.Builder
mendefinisikan 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);
Kesesuaian
Pengembang aplikasi harus menggunakan atribut audio saat membuat atau memperbarui aplikasi untuk Android 5.0 dan lebih tinggi. Namun, aplikasi tidak diharuskan untuk memanfaatkan atribut; mereka hanya dapat menangani jenis streaming lama atau tetap tidak mengetahui atributnya (yaitu pemutar media umum yang tidak mengetahui apa pun tentang konten yang diputarnya).
Dalam kasus seperti itu, framework ini menjaga kompatibilitas dengan perangkat lama dan rilis Android dengan secara otomatis menerjemahkan jenis aliran audio lama ke atribut audio. Namun, framework ini tidak menerapkan atau menjamin pemetaan ini di seluruh perangkat, produsen, atau rilis Android.
Pemetaan kompatibilitas:
Android 5.0 dan lebih tinggi | Android 4.4 dan versi 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 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_AKSESIBILITAS
Untuk lebih jelasnya, lihat Audio Otomotif .