Pemutar audio mendukung atribut yang menentukan cara sistem audio menangani keputusan perutean, volume, dan fokus untuk sumber yang ditentukan. Aplikasi dapat melampirkan atribut ke pemutaran audio (seperti musik yang diputar oleh layanan streaming atau pemberitahuan untuk email baru) kemudian 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 membuat keputusan pencampuran hanya menggunakan jenis streaming audio. Namun, mendasarkan keputusan semacam itu 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.
Menggunakan Audio Attribute API , aplikasi menyediakan sistem audio dengan informasi mendetail tentang sumber audio tertentu, termasuk penggunaan (mengapa sumber diputar), tipe konten (apa sumber diputar), flag (bagaimana sumber harus diputar), dan konteks (baru di Android 9). Sintaksis:
AudioAttributes { mUsage mContentType mSource mFlags mTags / mFormattedTags / mBundle (key value pairs) }
- penggunaan . Menentukan mengapa sumber diputar dan mengontrol keputusan perutean, fokus, dan volume.
- Jenis konten . Menentukan apa yang sedang diputar oleh sumber (musik, film, ucapan, sonifikasi, tidak diketahui).
- Konteks . Nilai penggunaan diabstraksikan ke Audio HAL.
- Bendera . Menentukan bagaimana sumber harus dimainkan. Termasuk dukungan untuk penegakan audibilitas (suara rana kamera diperlukan di beberapa negara) dan sinkronisasi audio/video perangkat keras.
Untuk pemrosesan dinamis, aplikasi harus membedakan antara konten film, musik, dan ucapan. Informasi tentang data itu sendiri mungkin juga penting, seperti kenyaringan dan nilai sampel puncak.
Menggunakan atribut
Penggunaan menentukan konteks di mana aliran digunakan, memberikan informasi tentang mengapa suara diputar dan untuk apa suara itu digunakan. Informasi penggunaan lebih ekspresif daripada jenis aliran dan memungkinkan platform atau kebijakan perutean untuk menyempurnakan keputusan volume atau perutean.
Berikan salah satu nilai penggunaan berikut untuk setiap instans:
- USAGE_UNKNOWN
- USAGE_MEDIA
- USAGE_VOICE_COMMUNICATION
- USAGE_VOICE_COMMUNICATION_SIGNALLING
- USAGE_ALARM
- PENGGUNAAN_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 saling eksklusif. Sebagai contoh, lihat definisi USAGE_MEDIA
dan USAGE_ALARM
; untuk pengecualian, lihat definisi AudioAttributes.Builder
.
Jenis konten
Jenis konten mendefinisikan suara dan mengungkapkan 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 menyediakan 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 tipe konten berikut untuk setiap instans:
-
CONTENT_TYPE_UNKNOWN
(bawaan) -
CONTENT_TYPE_MOVIE
-
CONTENT_TYPE_MUSIC
-
CONTENT_TYPE_SONIFICATION
-
CONTENT_TYPE_SPEECH
Nilai jenis 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 untuk menghasilkan suara; dan perangkat Android menggunakan informasi ini untuk menentukan cara menampilkan suara. Di Android 8.x dan yang lebih rendah, aplikasi dapat melaporkan alasan pembuatan suara menggunakan jenis aliran lama (mis. AudioSystem.STREAM_MUSIC
) atau AudioAttributes
. Di Android 9, nilai AudioAttributes.usage
diabstraksikan pada level HAL sebagai Contexts .
konteks audio HAL | Penggunaan AudioAttributes |
---|---|
MUSIK | MEDIA |
VOICE_COMMAND | USAGE_ASSISTANT |
NAVIGASI | ASSISTANCE_NAVIGATION_GUIDANCE |
PANGGILAN | SUARA_KOMUNIKASI |
NADA DERING | NOTIFICATION_RINGTONE |
PEMBERITAHUAN | PEMBERITAHUAN |
ALARM | ALARM |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
TIDAK DIKENAL | TIDAK DIKENAL |
Anda dapat memberikan salah satu dari nilai CONTEXT_NUMBER
berikut untuk setiap instance:
- 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 // Suara alarm dari Android
- NOTIFICATION_CONTEXT // Pemberitahuan
- SYSTEM_SOUND_CONTEXT // Suara interaksi pengguna (klik tombol, dll)
Bendera
Bendera menentukan bagaimana kerangka kerja audio menerapkan efek pada pemutaran audio. Berikan satu atau lebih dari flag berikut untuk sebuah instance:
-
FLAG_AUDIBILITY_ENFORCED
. Meminta sistem untuk memastikan kemampuan mendengar 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 tidak eksklusif dan dapat digabungkan. Untuk detail tentang tanda ini, lihat API atribut audio .
Contoh
Dalam contoh ini, AudioAttributes.Builder
mendefinisikan AudioAttributes
untuk 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 aliran lama atau tetap tidak mengetahui atribut (yaitu pemutar media umum yang tidak mengetahui apa pun tentang konten yang sedang diputar).
Dalam kasus seperti itu, kerangka kerja mempertahankan kompatibilitas mundur dengan perangkat lama dan rilis Android dengan secara otomatis menerjemahkan jenis aliran audio lama ke atribut audio. Namun, framework tidak memberlakukan atau menjamin pemetaan ini di seluruh perangkat, produsen, atau rilis Android.
Pemetaan kompatibilitas:
Android 5.0 dan lebih tinggi | Android 4.4 dan sebelumnya |
---|---|
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 | (@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 aliran 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 lebih jelasnya, lihat Audio Otomotif .