Microsoft DirectX 8.0 (C++)

DirectSound オブジェクトの作成

DirectSound オブジェクトを作成する最も簡単な方法は、DirectSoundCreate8 関数を使うことである。この関数の最初のパラメータは、このオブジェクトに関連付けられるデバイスの GUID を指定する。この GUID は、サウンド デバイスの列挙で取得できる。または、次のいずれかの GUID を渡してデフォルトのデバイスを指定する。

DSDEVID_DefaultPlayback
デフォルトのシステム オーディオ デバイス。デバイスの GUID パラメータで NULL ポインタを渡すことによって、このデバイスを指定することもできる。デフォルトのデバイスは、 "プライマリ DirectSound ドライバ" として列挙される。
DSDEVID_DefaultVoicePlayback
デフォルトの音声通信デバイス。これは、通常、USB マイク付きヘッドセットなどのセカンダリ デバイスである。

デバイス ドライバが存在しない場合は、DirectSoundCreate8 の呼び出しは失敗する。

サウンド デバイスが存在しないか、VXD ドライバの場合、標準の Win32 ウェーブフォーム オーディオ関数を利用するアプリケーションがサウンド デバイスを制御している場合は、この関数はエラーを返す。アプリケーションはこの呼び出しが失敗した場合に備えて、サウンドなしでアプリケーションを続行するか、既にサウンド デバイスを使っているアプリケーションを閉じるようユーザーにプロンプトを表示するか、どちらかの準備をする必要がある。

次のコードでは、デフォルト デバイスの DirectSound オブジェクトを作成し、IDirectSound8 インターフェイスを取得している。

LPDIRECTSOUND8 lpds; 
HRESULT hr = DirectSoundCreate8(NULL, &lpds, NULL));
 

  DirectSoundCreate8CoInitialize を呼び出さない。アプリケーションがエフェクト DMO を使用する場合、アプリケーションは DirectSound オブジェクトの作成方法に関係なく、CoInitialize を呼び出す必要がある。

アプリケーションがサウンドをキャプチャして再生する場合、DirectSoundFullDuplexCreate8 関数を使って、DirectSound と DirectSoundCapture の両方のオブジェクト、および再生およびキャプチャ バッファを作成できる。

標準的な COM 関数を使って、次のように DirectSound オブジェクトを作成することもできる。

  1. アプリケーションの起動時に CoInitializeEx を呼び出して COM を初期化する。
    if FAILED(CoInitializeEx(NULL, 0))
        return FALSE;
     
  2. DirectSoundCreate8 関数ではなく、CoCreateInstanceIDirectSound8::Initialize の各メソッドを使って DirectSound オブジェクトを作成する。
    LPDIRECTSOUND8 lpds; 
    HRESULT hr = CoCreateInstance(&CLSID_DirectSound8,
                                  NULL, 
                                  CLSCTX_INPROC_SERVER,
                                  &IID_IDirectSound8,
                                  &lpds);

    CLSID_DirectSound8 は DirectSound のドライバ オブジェクト クラスのクラス識別子であり、IID_IDirectSound8 はインターフェイス識別子である。lpds パラメータはインターフェイス ポインタを受け取る。

  3. IDirectSound8::Initialize メソッドを呼び出して、オブジェクトをデバイスに関連付ける。このメソッドは、DirectSoundCreate8 と同じデバイス GUID パラメータを取る。
    if SUCCEEDED(hr)
        hr = lpds->Initialize(NULL);
     
  4. アプリケーションを閉じる前に、次のように CoUninitialize 関数を呼び出して COM ライブラリを閉じる。
    CoUninitialize();