次の方法で共有


デバイス オブジェクトの作成

デバイス オブジェクトを作成する最も簡単な方法は、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 関数を使って、次のようにデバイス オブジェクトを作成することもできる。

  1. アプリケーションの起動時に CoInitializeEx を呼び出して COM を初期化する。

    HRESULT hr = CoInitializeEx(NULL, 0);
    if (FAILED(hr))
    {
      ErrorHandler(hr);  // エラー処理をここに追加する。
    }
    
  2. DirectSoundCreate8 関数ではなく、CoCreateInstanceIDirectSound8::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 パラメータはインターフェイス ポインタを受け取る。

  3. IDirectSound8::Initialize メソッドを呼び出して、オブジェクトをデバイスに関連付ける。このメソッドは、DirectSoundCreate8 と同じデバイス GUID パラメータを取る。

    hr = lpds->Initialize(NULL);
    if (FAILED(hr))
    {
      ErrorHandler(hr);  // エラー処理をここに追加する。
    }
    
  4. アプリケーションを閉じる前に、次のように CoUninitialize 関数を呼び出して COM ライブラリを閉じる。

    CoUninitialize();