Atribut audio

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