程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 波形捕捉:(2)創建捕捉設備對象

波形捕捉:(2)創建捕捉設備對象

編輯:關於C++

你可以通過調用 DirectSoundCaptureCreate8 或 DirectSoundFullDuplexCreate8 函數來創建一個捕捉設備對象。這兩個函數都 獲取一個指向IDirectSoundCapture8 接口的指針。

DirectSoundCaptureCreate 的lpcGUID參數或 DirectSoundFullDuplexCreate8 的pcGuidRenderDevice參數可以是一個由枚舉 得到的GUID,或者是如下預定義的GUID之一:

GUID Description DSDEVID_DefaultCapture 系統默認的聲音捕捉設備。你也可以通過傳遞一個NULL指針而不是設備 GUID來指定一個設備。 DSDEVID_DefaultVoiceCapture 默認聲音溝通設備。通常情況下,這是一個輔助設備如帶麥克風的USB 耳機。

如果當前沒有設備驅動,則調用失敗。

你也可以使用 CoCreateInstance 函數來創建一個對象。這個過程與創建設 備對象類似。步驟如下:

1.在應用程序啟動時通過調用 CoInitializeEx 函數初始化COM對象

Code

HRESULT hr = CoInitializeEx(NULL, 0);
  if (FAILED(hr))
  {
   ErrorHandler(hr); // Add error-handling here.
  }

2.通過調用 CoCreateInstance 方法和 IDirectSound8::Initialize 方法創 建設備對象,而不是使用 DirectSoundCreate8 函數

Code

LPDIRECTSOUND8 lpds;
  hr = CoCreateInstance(&CLSID_DirectSound8,
       NULL,
       CLSCTX_INPROC_SERVER,
       IID_IDirectSound8,
       (LPVOID*) &lpds);
  if (FAILED(hr))
  {
   ErrorHandler(hr); // Add error-handling here.
  }

CLSID_DirectSound8 是DirectSound驅動對象類的類標識符, IID_IDirectSound8 是接口標識符。lpds參數接收這個接口的指針。

3.調用 IDirectSound8::Initialize 方法來關聯對象和設備。這個方法使用 的參數與 DirectSoundCreate8 使用的設備GUID參數相同。

Code

hr = lpds->Initialize(NULL);
  if (FAILED(hr))
  {
   ErrorHandler(hr); // Add error-handling here.
  }

4.在你結束應用程序的時候,通過調用 CoUninitialize 函數來結束COM庫, 如下:

CoUninitialize();

如果你使用 CoCreateInstance,那麼用戶在控制面板中選擇的默認捕捉設備 對象將被創建。

如果你想要播放設備對象和捕捉設備對象同時存在,那麼你應該在創建和初 始化捕捉設備對象前創建並初始化播放設備對象,或者使用 DirectSoundFullDuplexCreate8。

有些音頻設備默認沒有設定為全雙工音頻。如果你的應用程序在創建和初始 化播放設備對象和捕捉設備對象時出現問題,你應該建議用戶檢查音頻設備屬性 ,從而確保全雙工已經被啟用了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved