自 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
。- 當使用
IDevice::createAudioPatch()
方法在音訊 HAL 中選取裝置時,device
會透過音訊架構指派的專屬AudioPortHandle
進行識別。
音訊 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 功能