Efek Audio

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 atau TYPE_POST_PROC diatur di EffectDescriptor.flags ).
  • Jika implementasi efek dipercepat HW (bendera HW_ACC_TUNNEL diatur di EffectDescriptor.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 harus AudioSessionConsts.DEVICE .
  • AudioIoHandle diabaikan jika session adalah AudioSessionConsts.DEVICE .
  • device diidentifikasi oleh AudioPortHandle unik yang ditetapkan oleh kerangka kerja audio saat perangkat dipilih di HAL audio dengan IDevice::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.