デバイス オブジェクトの作成
デバイス オブジェクトを作成する最も簡単な方法は、DirectSoundCreate8 関数を使うことである。この関数の最初のパラメータでは、このオブジェクトに関連付けられるデバイスの GUID を指定する。この GUID は、デバイスを列挙することで取得できる。または、次のいずれかの GUID を渡してデフォルトのデバイスを指定できる。
GUID 定義 | 説明 |
DSDEVID_DefaultPlayback | デフォルトのシステム オーディオ デバイス。デバイスの GUID パラメータで NULL ポインタを渡すことによって、このデバイスを指定することもできる。デフォルトのデバイスは、 "プライマリ DirectSound ドライバ" として列挙される。 |
DSDEVID_DefaultVoicePlayback | デフォルトの音声通信デバイス。これは、通常、USB マイク付きヘッドセットなどのセカンダリ デバイスである。 |
デバイス ドライバが存在しない場合は、DirectSoundCreate8 の呼び出しは失敗する。
サウンド デバイスが存在しない場合、または VXD ドライバにおいて標準の Win32 ウェーブフォーム オーディオ関数を利用するアプリケーションがサウンド デバイスを制御している場合は、この関数はエラーを返す。アプリケーションはこの呼び出しが失敗した場合に備えて、サウンドなしでアプリケーションを続行するか、既にサウンド デバイスを使っているアプリケーションを閉じるようユーザーにプロンプトを表示するか、どちらかの準備をする必要がある。
次のコードでは、デフォルト デバイスのオブジェクトを作成し、IDirectSound8 インターフェイスを取得している。
LPDIRECTSOUND8 lpds;
HRESULT hr = DirectSoundCreate8(NULL, &lpds, NULL));
注 DirectSoundCreate8 では CoInitialize または CoInitializeEx は呼び出されない。アプリケーションでエフェクト DMO を使う場合は、オブジェクトを作成する前に、COM を明示的に初期化する必要がある。
アプリケーションがサウンドをキャプチャして再生する場合は、DirectSoundFullDuplexCreate8 関数を使うことで、レンダリング デバイスとキャプチャ デバイス、再生バッファとキャプチャ バッファを簡単に作成できる。
標準的な COM 関数を使って、次のようにデバイス オブジェクトを作成することもできる。
アプリケーションの起動時に CoInitializeEx を呼び出して COM を初期化する。
HRESULT hr = CoInitializeEx(NULL, 0); if (FAILED(hr)) { ErrorHandler(hr); // エラー処理をここに追加する。 }
DirectSoundCreate8 関数ではなく、CoCreateInstance と IDirectSound8::Initialize メソッドを使ってデバイス オブジェクトを作成する。
LPDIRECTSOUND8 lpds; hr = CoCreateInstance(&CLSID_DirectSound8, NULL, CLSCTX_INPROC_SERVER, IID_IDirectSound8, (LPVOID*) &lpds); if (FAILED(hr)) { ErrorHandler(hr); // エラー処理をここに追加する。 }
CLSID_DirectSound8 は DirectSound のドライバ オブジェクト クラスのクラス識別子であり、IID_IDirectSound8 はインターフェイス識別子である。lpds パラメータはインターフェイス ポインタを受け取る。
IDirectSound8::Initialize メソッドを呼び出して、オブジェクトをデバイスに関連付ける。このメソッドは、DirectSoundCreate8 と同じデバイス GUID パラメータを取る。
hr = lpds->Initialize(NULL); if (FAILED(hr)) { ErrorHandler(hr); // エラー処理をここに追加する。 }
アプリケーションを閉じる前に、次のように CoUninitialize 関数を呼び出して COM ライブラリを閉じる。
CoUninitialize();