Mulai Android 11, produsen perangkat memiliki kemampuan untuk secara otomatis melampirkan dan mengaktifkan efek audio tertentu saat perangkat audio tertentu dipilih untuk pengambilan atau pemutaran audio. Salah satu peningkatan besar adalah bahwa efek audio yang dimasukkan pada jalur audio yang sepenuhnya diimplementasikan di bawah audio HAL (koneksi langsung antara perangkat input dan perangkat output) dapat dikontrol oleh kerangka efek audio.
Fitur ini terutama ditujukan untuk OEM otomotif tetapi juga dapat digunakan di faktor bentuk Android lainnya. Contoh aplikasi memasukkan efek peningkatan suara pada output tuner FM saat terhubung langsung ke speaker melalui DSP audio.
Prasyarat
- Untuk efek audio lainnya, efek tersebut harus diimplementasikan oleh pustaka vendor dan dicantumkan dalam file konfigurasi
audio_effects.xml
. - Efeknya harus bertipe preprocessing atau postprocessing (flag
TYPE_PRE_PROC
atauTYPE_POST_PROC
diatur diEffectDescriptor.flags
). - Jika implementasi efek dipercepat HW (bendera
HW_ACC_TUNNEL
diatur diEffectDescriptor.flags
), itu dapat dilampirkan ke jalur audio yang sepenuhnya terhubung di bawah HAL (tidak ada pemutaran atau pengambilan aliran audio yang dibuka di audio HAL).
Membuat dan mengaktifkan efek perangkat
Efek audio khusus perangkat dapat dibuat menggunakan salah satu dari dua metode di bawah ini.
Menggunakan file konfigurasi efek audio
Metode ini memungkinkan pembuatan statis efek audio yang dipasang secara sistematis dan diaktifkan ke jalur audio apa pun dengan memilih perangkat tertentu sebagai wastafel atau sumber.
Ini dilakukan dengan menambahkan bagian tertentu dalam file audio_effects.xml
sebagai berikut:
<deviceEffects> <devicePort type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom"> <apply effect="agc"/> </devicePort> </deviceEffects>
Menggunakan API sistem
Konstruktor @SystemApi baru telah ditambahkan ke kelas android.media.audiofx.AudioEffect
untuk membuat dan mengaktifkan efek perangkat:
AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
Setelah efek dibuat dengan menentukan ID efek audio unik dan deskriptor perangkat audio, efek tersebut dapat diaktifkan atau dinonaktifkan dengan API AudioEffect yang ada.
API juga tersedia untuk menanyakan apakah suatu implementasi mendukung kombinasi perangkat/efek tertentu.
static boolean isEffectSupportedForDevice( @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
API HAL baru
Efek audio HAL
Efek audio HAL V6.0 memiliki tanda tangan baru untuk metode createEffect()
yang memungkinkan pembuatan efek yang dilampirkan ke perangkat:
IEffectFactory::createEffect(Uuid uid, AudioSession session, AudioIoHandle ioHandle, AudioPortHandle device)
-
AudioSession
yang ditentukan harusAudioSessionConsts.DEVICE
. -
AudioIoHandle
diabaikan jikasession
adalahAudioSessionConsts.DEVICE
. -
device
diidentifikasi olehAudioPortHandle
unik yang ditetapkan oleh kerangka kerja audio saat perangkat dipilih di HAL audio denganIDevice::createAudioPatch()
.
Audio HAL
Untuk mendukung fitur efek perangkat, HAL audio harus mengimplementasikan kontrol perutean audio menggunakan IDevice::createAudioPatch()
API. Ini ditunjukkan oleh metode IDevice::supportsAudioPatches()
yang melaporkan true
.
Dua metode API baru, IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId)
dan IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId)
memberi tahu implementasi HAL bahwa efek perangkat telah diaktifkan atau dinonaktifkan pada perangkat tertentu.
Perangkat diidentifikasi dengan ID AudioPortHandle
, yang digunakan saat patch audio dibuat dengan metode IDevice::createAudioPatch()
.
Audio HAL API dapat digunakan oleh implementasi jika koordinasi diperlukan antara audio dan efek HAL saat efek diaktifkan atau dinonaktifkan.