DirectSound 提供多種建立捕捉裝置的途徑,適用不同架構需求。
LPDIRECTSOUNDCAPTURE8 pDSC;
HRESULT hr = DirectSoundCaptureCreate8(
nullptr, // nullptr = 系統預設捕捉裝置
&pDSC,
nullptr); // 保留參數
lpcGUID 可為列舉取得的 GUID 或預定義常數:DSDEVID_DefaultCapture、DSDEVID_DefaultVoiceCaptureLPDIRECTSOUNDCAPTUREBUFFER8 pDSCB;
LPDIRECTSOUNDBUFFER8 pDSB;
LPDIRECTSOUNDFULLDUPLEX8 pDSFD;
hr = DirectSoundFullDuplexCreate8(
&capture_guid, &render_guid,
&capture_wfx, &render_wfx,
hWnd, DSSCL_PRIORITY,
&pDSCB, &pDSB, &pDSFD, nullptr);
// 1. 初始化 COM
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
// 2. 建立物件
LPDIRECTSOUNDCAPTURE8 pDSC;
hr = CoCreateInstance(CLSID_DirectSoundCapture8, nullptr,
CLSCTX_INPROC_SERVER, IID_IDirectSoundCapture8, (void**)&pDSC);
// 3. 關聯裝置
hr = pDSC->Initialize(nullptr); // nullptr = 預設裝置
// 4. 結束時釋放
CoUninitialize();
優點:可精確控制 COM 執行緒模型、裝置關聯時機。
若需同時存在播放與捕捉裝置物件,必須先建立並初始化播放裝置,再建立捕捉裝置,否則可能因資源衝突失敗。或直接使用
DirectSoundFullDuplexCreate8。
部分音訊裝置預設關閉全雙工。若建立失敗,建議使用者檢查控制台 → 音訊裝置屬性 → 啟用全雙工模式。
第二篇:建立裝置物件 ← 當前 | 第三篇:查詢裝置能力 | 第四篇:建立緩衝區