Mulai Android 11, produsen perangkat memiliki kemampuan untuk melampirkan dan mengaktifkan efek audio tertentu secara otomatis saat perangkat audio tertentu dipilih untuk pengambilan atau pemutaran audio. Salah satu peningkatan utama adalah efek audio yang disisipkan pada jalur audio yang sepenuhnya diterapkan di bawah HAL audio (koneksi langsung antara perangkat input dan perangkat output) dapat dikontrol oleh framework efek audio.
Fitur ini terutama ditujukan untuk OEM otomotif, tetapi juga dapat digunakan dalam faktor bentuk Android lainnya. Contoh aplikasi menyisipkan efek peningkatan kualitas suara pada output tuner FM saat terhubung langsung ke speaker melalui DSP audio.
Prasyarat
- Seperti efek audio lainnya, efek harus diimplementasikan oleh library vendor dan tercantum dalam file konfigurasi
audio_effects.xml
. - Efek harus berjenis praproses atau pascaproses
(tanda
TYPE_PRE_PROC
atauTYPE_POST_PROC
ditetapkan diEffectDescriptor.flags
). - Jika penerapan efek dipercepat HW
(flag
HW_ACC_TUNNEL
ditetapkan diEffectDescriptor.flags
), efek dapat dilampirkan ke jalur audio yang sepenuhnya terhubung di bawah HAL (tidak ada streaming audio pemutaran atau perekaman yang dibuka di HAL audio).
Membuat dan mengaktifkan efek perangkat
Efek audio khusus perangkat dapat di-instantiate menggunakan salah satu dari dua metode di bawah.
Menggunakan file konfigurasi efek audio
Metode ini memungkinkan pembuatan efek audio statis yang secara sistematis dilampirkan dan diaktifkan ke jalur audio mana pun yang memilih perangkat tertentu sebagai sink atau sumber.
Hal ini dilakukan dengan menambahkan bagian tertentu dalam file audio_effects.xml
seperti 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 class
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 AudioEffect API yang ada.
API juga tersedia untuk mengkueri apakah penerapan mendukung kombinasi perangkat/efek tertentu.
static boolean isEffectSupportedForDevice( @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
API HAL baru
HAL efek audio
HAL efek audio V6.0 memiliki tanda tangan baru untuk metode createEffect()
yang memungkinkan pembuatan efek yang terlampir 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 framework audio saat perangkat dipilih di HAL audio dengan metodeIDevice::createAudioPatch()
.
HAL Audio
Untuk mendukung fitur efek perangkat, HAL audio harus menerapkan kontrol perutean audio menggunakan IDevice::createAudioPatch()
API. Hal 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 penerapan HAL bahwa efek perangkat telah diaktifkan atau dinonaktifkan di
perangkat tertentu.
Perangkat diidentifikasi dengan ID AudioPortHandle
, yang digunakan saat patch audio dibuat dengan metode IDevice::createAudioPatch()
.
API HAL Audio dapat digunakan oleh implementasi jika koordinasi diperlukan antara HAL audio dan efek saat efek diaktifkan atau dinonaktifkan.