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