Atribut audio

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 kebutuhan STREAM_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.