從 Android 11 開始,裝置製造商將支援這項功能 在特定音訊裝置 已選取用於音訊擷取或播放其中一個主要改善空間是插入音效 完全導入於音訊 HAL 下方的音訊路徑上 (輸入內容之間的直接連線) 裝置和輸出裝置) 均可透過音效架構控制。
這項功能主要適用於汽車原始設備製造商 (OEM),但也可以用於其他 Android 裝置 板型規格有一個範例應用程式在 FM 調諧器上插入語音強化效果 輸出端。
必要條件
- 至於任何其他音訊效果,必須由供應商程式庫導入並列出此效果
audio_effects.xml
設定檔中。 - 效果須為預先處理或後續處理類型
(標記
TYPE_PRE_PROC
或TYPE_POST_PROC
在EffectDescriptor.flags
中設定的)。 - 如果效果實作為硬體加速
(已在
EffectDescriptor.flags
中設定HW_ACC_TUNNEL
標記), 可以附加至 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
如果session
是AudioSessionConsts.DEVICE
。- 選用裝置時,音訊架構會指派專屬
AudioPortHandle
來識別device
使用IDevice::createAudioPatch()
方法傳送音訊 HAL
音訊 HAL
如要支援裝置特效功能,音訊 HAL 必須導入音訊轉送功能
控管是否要使用 IDevice::createAudioPatch()
API會由
回報 IDevice::supportsAudioPatches()
方法 true
。
兩個新的 API 方法
「IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId)
」和
IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId)
告知 HAL 實作項目,表示已啟用或停用裝置效果
即可。
裝置可透過 AudioPortHandle
ID 辨識,在音訊播放時使用
修補作業是透過 IDevice::createAudioPatch()
方法建立
實作項目可運用 Audio HAL API,前提是必須在 啟用或停用效果 HAL 功能