Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Efek Audio

Mulai Android 11, produsen perangkat memiliki kemampuan untuk secara otomatis memasang dan mengaktifkan efek audio tertentu saat perangkat audio tertentu dipilih untuk perekaman atau pemutaran audio. Salah satu peningkatan utama adalah bahwa efek audio yang disisipkan pada jalur audio yang sepenuhnya diterapkan 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. Sebuah aplikasi contoh memasukkan efek peningkatan suara pada output FM tuner ketika terhubung langsung ke speaker melalui audio DSP.

Prasyarat

  • Adapun efek audio lainnya, efek tersebut harus diimplementasikan oleh pustaka vendor dan terdaftar di file konfigurasi audio_effects.xml .
  • Efeknya harus bertipe preprocessing atau postprocessing (tandai TYPE_PRE_PROC atau TYPE_PRE_PROC disetel di EffectDescriptor.flags ).
  • Jika implementasi efek dipercepat HW (bendera HW_ACC_TUNNEL disetel di EffectDescriptor.flags ), itu bisa dilampirkan ke jalur audio yang seluruhnya terhubung di bawah HAL (tidak ada pemutaran atau perekaman aliran audio 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 dari efek audio yang dipasang secara sistematis dan diaktifkan ke jalur audio mana pun dengan memilih perangkat yang ditentukan sebagai sink atau sumber.

Ini dilakukan dengan menambahkan bagian tertentu di 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 melakukan kueri jika 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 ditentukan harus AudioSessionConsts.DEVICE .
  • AudioIoHandle diabaikan jika session adalah AudioSessionConsts.DEVICE .
  • device diidentifikasi oleh AudioPortHandle uniknya yang ditetapkan oleh framework audio saat perangkat dipilih di audio HAL dengan IDevice::createAudioPatch() .

Audio HAL

Untuk mendukung fitur efek perangkat, audio HAL harus menerapkan kontrol perutean audio menggunakan IDevice::createAudioPatch() . 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 oleh 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 efek HAL saat efek diaktifkan atau dinonaktifkan.