Atribut Audio

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