Windows XP 引入兩種內核級實現的捕捉緩衝區特效:聲學回聲消除 (AEC) 與降噪 (NS),需透過 DirectSoundFullDuplexCreate8 建立完整雙工鏈路才能啟用。
DirectSoundFullDuplexCreate8 同時建立捕捉與播放緩衝區DSCBUFFERDESC 中指定 DSCEFFECTDESC 陣列dwFlags:DSCFX_LOCHARDWARE 或 DSCFX_LOCSOFTWAREDSCFX_MS_AEC (回聲消除)、DSCFX_MS_NS (降噪)DSCEFFECTDESC desc = {};
desc.dwSize = sizeof(DSCEFFECTDESC);
desc.dwFlags = DSCFX_LOCSOFTWARE; // 或 DSCFX_LOCHARDWARE
desc.guidDSCFXClass = GUID_DSCFX_CLASS_AEC; // 或 NS
desc.guidDSCFXInstance = DSCFX_MS_AEC; // 微軟軟體實現
// 將 desc 陣列傳入 DSCBUFFERDESC.lpDSCFXDesc
應用場景:雙向語音通訊 (VoIP、視訊會議)
原理:監控麥克風輸入,濾除喇叭播放聲音在環境中的回聲,防止遠端聽到自己的聲音回授 (Howling)。
IDirectSoundCaptureFXNoiseSuppress8IDirectSoundCaptureFXAec8* pAec = nullptr;
pDSCBuffer->GetObjectInPath(GUID_DSCFX_CLASS_AEC, 0, DSCFX_MS_AEC,
IID_IDirectSoundCaptureFXAec8, (void**)&pAec);
// 設定參數範例
DSCFX_AEC_PARAMS params = { true, false, true }; // 啟用、不靜音、自動增益
pAec->SetAllParameters(¶ms);
第七篇:特效 (AEC/NS) ← 當前 | 第八篇:使用捕捉緩衝區 | 第九篇:寫入 WAV