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 ini memasukkan efek peningkatan suara pada output penala FM 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
class
android.media.audiofx.AudioEffect
untuk membuat dan mengaktifkan efek perangkat:
AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
Setelah dibuat dengan menentukan ID efek audio unik dan deskriptor perangkat audio, efek dapat diaktifkan atau dinonaktifkan dengan AudioEffect API yang 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()
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
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 mengimplementasikan 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 implementasi HAL bahwa efek perangkat telah diaktifkan atau dinonaktifkan di
perangkat tertentu.
Perangkat diidentifikasi berdasarkan ID AudioPortHandle
-nya, yang digunakan saat patch
audio dibuat dengan metode IDevice::createAudioPatch()
.
Audio HAL API dapat digunakan oleh implementasi jika koordinasi diperlukan antara HAL audio dan efek saat efek diaktifkan atau dinonaktifkan.