首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

DirectSound 波形捕捉系列(二):建立捕捉裝置物件

     編輯:關於C++

三種建立捕捉裝置物件的方法

DirectSound 提供多種建立捕捉裝置的途徑,適用不同架構需求。

方法一:DirectSoundCaptureCreate8 (最常用)

LPDIRECTSOUNDCAPTURE8 pDSC;
HRESULT hr = DirectSoundCaptureCreate8(
    nullptr,  // nullptr = 系統預設捕捉裝置
    &pDSC,
    nullptr); // 保留參數
  • lpcGUID 可為列舉取得的 GUID 或預定義常數:DSDEVID_DefaultCapture、DSDEVID_DefaultVoiceCapture
  • 若無裝置驅動,呼叫失敗

方法二:DirectSoundFullDuplexCreate8 (雙工需求)

LPDIRECTSOUNDCAPTUREBUFFER8 pDSCB;
LPDIRECTSOUNDBUFFER8 pDSB;
LPDIRECTSOUNDFULLDUPLEX8 pDSFD;
hr = DirectSoundFullDuplexCreate8(
    &capture_guid, &render_guid,
    &capture_wfx, &render_wfx,
    hWnd, DSSCL_PRIORITY,
    &pDSCB, &pDSB, &pDSFD, nullptr);
  • 同時建立捕捉/播放緩衡區與雙物件
  • 啟用 AEC/NS 特效必須使用此函式

方法三:COM 手動建立 (進階控制)

// 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。

全雙工硬體設定提醒

部分音訊裝置預設關閉全雙工。若建立失敗,建議使用者檢查控制台 → 音訊裝置屬性 → 啟用全雙工模式。

完整系列導覽

第二篇:建立裝置物件 ← 當前 | 第三篇:查詢裝置能力 | 第四篇:建立緩衝區

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved