デバイス オブジェクトの作成
デバイス オブジェクトを作成する最も簡単な方法は、DirectSoundCreate8 関数を使用することです。この関数の最初のパラメーターは、オブジェクトに関連付けられるデバイスの GUID を指定します。この GUID は、デバイスを列挙することで取得できます。または以下のいずれかの GUID を渡して、既定のデバイスを指定することもできます。
GUID の定義 | 説明 |
---|---|
DSDEVID_DefaultPlayback | 既定のシステム オーディオ デバイスです。このデバイスは、デバイスの GUID パラメーターで NULL ポインターを渡すことでも指定できます。既定のデバイスは、"プライマリ DirectSound ドライバー" として列挙されるデバイスです。 |
DSDEVID_DefaultVoicePlayback | 既定のボイス コミュニケーション デバイスです。通常、マイクロフォン付き USB ヘッドセットなどのセカンダリ デバイスがこれにあたります。 |
デバイス ドライバーが存在しない場合、DirectSoundCreate8 への呼び出しは失敗します。
サウンド デバイスが存在しない場合、または VXD ドライバーの下で、サウンド デバイスが標準 Win32 Wave フォーム オーディオ関数を使用したアプリケーションの制御下にある場合、関数はエラーを返します。アプリケーションがサウンドなしで継続できる、またはユーザーにサウンド デバイスをすでに使用しているアプリケーションを閉じるように求めることができるように、アプリケーションを準備する必要があります。
以下のコードは既定のデバイスのオブジェクトを作成し、以下の IDirectSound8 インターフェイスを取得します。
LPDIRECTSOUND8 lpds;
HRESULT hr = DirectSoundCreate8(NULL, &lpds, NULL));
アプリケーションがサウンドをキャプチャーし、再生する場合、DirectSoundFullDuplexCreate8 関数を使用すると、レンダリング デバイスとキャプチャー デバイスの両方、および再生バッファーとキャプチャー バッファーを作成できて便利です。
また、標準 COM 関数を以下のように使用することでデバイス オブジェクトを作成することもできます。
アプリケーションの起動時に CoInitializeEx を呼び出すことで COM を初期化します。
HRESULT hr = CoInitializeEx(NULL, 0); if (FAILED(hr)) { ErrorHandler(hr); // Add error-handling here. }
DirectSoundCreate8 関数ではなく、CoCreateInstance および IDirectSound8::Initialize メソッドを使用してデバイス オブジェクトを作成します。
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 パラメーターはインターフェイス ポインターを受け取ります。
IDirectSound8::Initialize メソッドを呼び出してオブジェクトをデバイスに関連付けます。このメソッドは、DirectSoundCreate8 が使用するのと同じデバイス GUID パラメーターを取得します。
hr = lpds->Initialize(NULL); if (FAILED(hr)) { ErrorHandler(hr); // Add error-handling here. }
アプリケーションを閉じる前に、以下のように CoUninitialize 関数を呼び出すことで COM ライブラリを閉じます。
CoUninitialize();