Mulai Android 11, produsen perangkat memiliki kemampuan untuk secara otomatis melampirkan dan mengaktifkan efek audio tertentu saat perangkat audio tertentu dipilih untuk perekaman atau pemutaran audio. Salah satu peningkatan utama adalah efek audio yang disisipkan di 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 ditargetkan untuk OEM otomotif, tetapi juga dapat digunakan dalam faktor bentuk Android lainnya. Contoh aplikasi sedang memasukkan efek peningkatan suara pada penala FM output saat terhubung langsung ke speaker melalui DSP audio.
Prasyarat
- Seperti efek audio lainnya, efek harus diimplementasikan oleh library vendor dan dicantumkan
dalam file konfigurasi
audio_effects.xml
. - Efek harus berupa prapemrosesan atau pascapemrosesan
(tanda
TYPE_PRE_PROC
atauTYPE_POST_PROC
ditetapkan diEffectDescriptor.flags
). - Jika implementasi efek diakselerasi HW
(tanda
HW_ACC_TUNNEL
ditetapkan diEffectDescriptor.flags
), implementasi tersebut dapat dilampirkan ke jalur audio yang sepenuhnya terhubung di bawah HAL (tidak ada pemutaran atau streaming audio perekaman yang dibuka di HAL audio).
Membuat dan mengaktifkan efek perangkat
Efek audio khusus perangkat dapat dibuat instance-nya 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 apa pun yang memilih perangkat yang ditentukan sebagai sink atau sumber.
Hal 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
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, Anda dapat mengaktifkan atau menonaktifkannya dengan AudioEffect API yang sudah ada.
API juga tersedia untuk mengkueri apakah implementasi mendukung kombinasi perangkat/efek tertentu.
static boolean isEffectSupportedForDevice( @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
HAL API baru
HAL efek audio
Efek audio HAL V6.0 memiliki tanda tangan baru untuk metode createEffect()
memungkinkan pembuatan efek yang terpasang 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
uniknya 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 pemilihan rute
audio menggunakan IDevice::createAudioPatch()
API. Hal ini ditunjukkan oleh
Metode IDevice::supportsAudioPatches()
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
-nya, yang digunakan saat patch
audio dibuat dengan metode IDevice::createAudioPatch()
.
Audio HAL API dapat digunakan oleh implementasi jika diperlukan koordinasi antara audio dan HAL efek saat efek diaktifkan atau dinonaktifkan.