次の方法で共有


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

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

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

        HRESULT hr = CoInitializeEx(NULL, 0);
        if (FAILED(hr))
        {
          ErrorHandler(hr);  // Add error-handling here.
        }
    
  2. 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 パラメーターはインターフェイス ポインターを受け取ります。

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

        hr = lpds->Initialize(NULL);
        if (FAILED(hr))
        {
          ErrorHandler(hr);  // Add error-handling here.
        }
    
  4. アプリケーションを閉じる前に、以下のように CoUninitialize 関数を呼び出すことで COM ライブラリを閉じます。

        CoUninitialize();