Microsoft DirectX 8.0 (C++) |
DirectSound オブジェクトを作成する最も簡単な方法は、DirectSoundCreate8 関数を使うことである。この関数の最初のパラメータは、このオブジェクトに関連付けられるデバイスの GUID を指定する。この GUID は、サウンド デバイスの列挙で取得できる。または、次のいずれかの GUID を渡してデフォルトのデバイスを指定する。
デバイス ドライバが存在しない場合は、DirectSoundCreate8 の呼び出しは失敗する。
サウンド デバイスが存在しないか、VXD ドライバの場合、標準の Win32 ウェーブフォーム オーディオ関数を利用するアプリケーションがサウンド デバイスを制御している場合は、この関数はエラーを返す。アプリケーションはこの呼び出しが失敗した場合に備えて、サウンドなしでアプリケーションを続行するか、既にサウンド デバイスを使っているアプリケーションを閉じるようユーザーにプロンプトを表示するか、どちらかの準備をする必要がある。
次のコードでは、デフォルト デバイスの DirectSound オブジェクトを作成し、IDirectSound8 インターフェイスを取得している。
LPDIRECTSOUND8 lpds; HRESULT hr = DirectSoundCreate8(NULL, &lpds, NULL));
注 DirectSoundCreate8 は CoInitialize を呼び出さない。アプリケーションがエフェクト DMO を使用する場合、アプリケーションは DirectSound オブジェクトの作成方法に関係なく、CoInitialize を呼び出す必要がある。
アプリケーションがサウンドをキャプチャして再生する場合、DirectSoundFullDuplexCreate8 関数を使って、DirectSound と DirectSoundCapture の両方のオブジェクト、および再生およびキャプチャ バッファを作成できる。
標準的な COM 関数を使って、次のように DirectSound オブジェクトを作成することもできる。
if FAILED(CoInitializeEx(NULL, 0)) return FALSE;
LPDIRECTSOUND8 lpds; HRESULT hr = CoCreateInstance(&CLSID_DirectSound8, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectSound8, &lpds);
CLSID_DirectSound8 は DirectSound のドライバ オブジェクト クラスのクラス識別子であり、IID_IDirectSound8 はインターフェイス識別子である。lpds パラメータはインターフェイス ポインタを受け取る。
if SUCCEEDED(hr) hr = lpds->Initialize(NULL);
CoUninitialize();