Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

音效

從Android 11開始,設備製造商可以在選擇給定音頻設備進行音頻捕獲或播放時自動附加並啟用特定的音頻效果。一個主要的改進是,插入在完全在音頻HAL(輸入設備和輸出設備之間的直接連接)下方實現的音頻路徑上的音頻效果可以由音頻效果框架控制。

此功能主要針對汽車OEM,但也可以在其他Android外形尺寸中使用。一個示例應用程序是在通過音頻DSP直接連接到揚聲器時,在FM調諧器輸出上插入語音增強效果。

先決條件

  • 對於任何其他音頻效果,該效果必須由供應商庫實現並在audio_effects.xml配置文件中列出。
  • 的效果的類型必須是預處理或後處理(標誌TYPE_PRE_PROCTYPE_PRE_PROC在集EffectDescriptor.flags )。
  • 如果效果的實現是硬件加速(標誌HW_ACC_TUNNEL在集EffectDescriptor.flags ),它可以連接到完全連接在HAL(在音頻HAL打開沒有回放或捕獲的音頻流)下面的音頻路徑。

創建並啟用設備效果

可以使用以下兩種方法之一實例化特定於設備的音頻效果。

使用音頻效果配置文件

此方法允許靜態創建音頻效果,該音頻效果會系統地附加到選擇指定設備作為接收器或源的任何音頻路徑並啟用。

這是通過在audio_effects.xml文件中添加特定部分來完成的,如下所示:

<deviceEffects>
<devicePort type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom">
      	<apply effect="agc"/>
      </devicePort>
  </deviceEffects>
  

使用系統API

新的@SystemApi構造函數已添加到android.media.audiofx.AudioEffect類中,以創建並啟用設備效果:

AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

通過指定唯一的音頻效果ID和音頻設備描述符創建效果後,可以使用現有的AudioEffect API啟用或禁用該效果。

還可以使用API​​查詢實現是否支持給定的設備/效果組合。

static boolean isEffectSupportedForDevice(
            @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

新的HAL API

音效HAL

音頻效果HAL V6.0為createEffect()方法提供了新的簽名,允許創建連接到設備的效果:

IEffectFactory::createEffect(Uuid uid, AudioSession session,
AudioIoHandle ioHandle, AudioPortHandle device)
  • 指定的AudioSession必須是AudioSessionConsts.DEVICE
  • AudioIoHandle如果被忽略sessionAudioSessionConsts.DEVICE
  • 使用IDevice::createAudioPatch()方法在音頻HAL上選擇設備時,將通過音頻框架分配的唯一AudioPortHandle標識該device

音訊HAL

為了支持設備效果功能,音頻HAL必須使用IDevice::createAudioPatch() API實現音頻路由控制。這由報告為trueIDevice::supportsAudioPatches()方法指示。

IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId)IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId)這兩個新的API方法告訴HAL實現已在給定設備上啟用或禁用設備效果。

設備通過其AudioPortHandle ID進行標識,該ID在使用IDevice::createAudioPatch()方法創建音頻補丁時使用。

如果在啟用或禁用效果時需要在音頻HAL和效果HAL之間進行協調,則實現可以使用音頻HAL API。