Platform SDK: DirectX

DirectSound オブジェクトの設定

[C++]

DirectMusic に DirectSound オブジェクトを作成および管理させても、DirectSound を使用しないアプリケーションには関係ない。ただし、アプリケーションが DirectSound を使って、DirectMusic シンセサイザ以外のソースからウェーブ データを演奏している場合は、DirectMusic でも同じ IDirectSound インターフェイスを使用しなければならない。まず DirectSound オブジェクトを作成し、続いて DirectMusic にインターフェイス ポインタを渡す。この処理は、次の例に示すように IDirectMusicPerformance::Init の呼び出しで実行される。pPerfIDirectMusicPerformance で、pDSIDirectSound へのポインタである。

pPerf->Init(NULL, pDS, NULL);

 :  IDirectSound ポインタを IDirectMusicPerformance::Init に渡すときに、3 番目のパラメータのウィンドウ ハンドルは無視される。アプリケーションは IDirectSound::SetCooperativeLevel を呼び出して、制御ウィンドウの設定を行う必要がある。

DirectMusic で使用される DirectSound オブジェクトに、DSSCL_PRIORITY 協調レベルを設定する。DSSCL_NORMAL 協調レベルを設定した場合、DirectMusic はプライマリ バッファ フォーマットをアップグレードできない。

パフォーマンスに頼らずに、CoCreateInstance を使って自分で DirectMusic オブジェクトを作成する場合は、明示的に既存の IDirectSound インターフェイスにリンクしなければならない。この処理は、IDirectMusic::SetDirectSound メソッドを使って実行される。

IDirectMusicPort::SetDirectSound メソッドを使って、ポートに別の DirectSound オブジェクトを割り当てることもできる。異なるポートが異なるオーディオ デバイス上にあり、それぞれが固有の IDirectSound インターフェイスで表されている場合に、この操作を行う。ポートの DirectSound オブジェクトは、ポートがアクティブになると変更することができない。

DirectSound を必要とするポートをアクティブにする場合は、次のリストから、まず利用可能な IDirectSound インターフェイスを取得する。

  1. IDirectMusicPort::SetDirectSound に渡される IDirectSound インターフェイス
  2. IDirectMusic::SetDirectSound に渡される IDirectSound インターフェイス
  3. IDirectMusic::SetDirectSound に NULL が渡された場合は、DirectMusic によって作成された IDirectSound インターフェイス

DirectSound がエミュレーション モードである場合、オーディオ デバイスが排他的に使用される。アプリケーションは、フォーカスを失ったときに DirectSound を解放して、ほかのアプリケーションがデバイスを使用できるようにするべきである。一般的には、WM_ACTIVATE メッセージへの応答でこの処理を行う。

DirectMusic が DirectSound オブジェクトを作成している場合は、すべてのポートが非アクティブになったときに、オブジェクトが自動的に解放される (さらに、DirectMusic を使用する最初のポートが再びアクティブになったときに、オブジェクトが作成される)。ただし、自分で DirectSound オブジェクトを作成した場合は、自分で解放しなければならない。この処理を実行するには、IDirectMusic::SetDirectSound または IDirectMusicPort::SetDirectSound メソッドに、pDirectSound パラメータとして NULL を渡す。

[Visual Basic]

DirectMusic に DirectSound オブジェクトを作成および管理させても、DirectSound を使用しないアプリケーションには関係ない。ただし、アプリケーションが DirectSound を使って、DirectMusic シンセサイザ以外のソースからウェーブ データを演奏している場合は、DirectMusic でも同じ DirectSound オブジェクトを使用しなければならない。まず DirectSound オブジェクトを作成し、次にこれを DirectMusic に渡す。この処理は、次の例に示すように DirectMusicPerformance.Init の呼び出しで実行される。PerfDirectMusicPerformance オブジェクトで、DSDirectSound オブジェクトである。

Perf.Init(DS, 0);

 :  DirectSound オブジェクトを DirectMusicPerformance.Init に渡すときに、2 番目のパラメータのウィンドウ ハンドルは無視される。アプリケーションは、DirectSound.SetCooperativeLevel を呼び出して、制御ウィンドウの設定を行う必要がある。

DirctMusic で使用される DirectSound オブジェクトに、DSSCL_PRIORITY 協調レベルを設定する。DSSCL_NORMAL 協調レベルを設定した場合、DirectMusic はプライマリ バッファ フォーマットをアップグレードできない。