Platform SDK: DirectX |
DirectMusic に DirectSound オブジェクトを作成および管理させても、DirectSound を使用しないアプリケーションには関係ない。ただし、アプリケーションが DirectSound を使って、DirectMusic シンセサイザ以外のソースからウェーブ データを演奏している場合は、DirectMusic でも同じ IDirectSound インターフェイスを使用しなければならない。まず DirectSound オブジェクトを作成し、続いて DirectMusic にインターフェイス ポインタを渡す。この処理は、次の例に示すように IDirectMusicPerformance::Init の呼び出しで実行される。pPerf は IDirectMusicPerformance で、pDS は IDirectSound へのポインタである。
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 インターフェイスを取得する。
DirectSound がエミュレーション モードである場合、オーディオ デバイスが排他的に使用される。アプリケーションは、フォーカスを失ったときに DirectSound を解放して、ほかのアプリケーションがデバイスを使用できるようにするべきである。一般的には、WM_ACTIVATE メッセージへの応答でこの処理を行う。
DirectMusic が DirectSound オブジェクトを作成している場合は、すべてのポートが非アクティブになったときに、オブジェクトが自動的に解放される (さらに、DirectMusic を使用する最初のポートが再びアクティブになったときに、オブジェクトが作成される)。ただし、自分で DirectSound オブジェクトを作成した場合は、自分で解放しなければならない。この処理を実行するには、IDirectMusic::SetDirectSound または IDirectMusicPort::SetDirectSound メソッドに、pDirectSound パラメータとして NULL を渡す。
DirectMusic に DirectSound オブジェクトを作成および管理させても、DirectSound を使用しないアプリケーションには関係ない。ただし、アプリケーションが DirectSound を使って、DirectMusic シンセサイザ以外のソースからウェーブ データを演奏している場合は、DirectMusic でも同じ DirectSound オブジェクトを使用しなければならない。まず DirectSound オブジェクトを作成し、次にこれを DirectMusic に渡す。この処理は、次の例に示すように DirectMusicPerformance.Init の呼び出しで実行される。Perf は DirectMusicPerformance オブジェクトで、DS は DirectSound オブジェクトである。
Perf.Init(DS, 0);
注 : DirectSound オブジェクトを DirectMusicPerformance.Init に渡すときに、2 番目のパラメータのウィンドウ ハンドルは無視される。アプリケーションは、DirectSound.SetCooperativeLevel を呼び出して、制御ウィンドウの設定を行う必要がある。
DirctMusic で使用される DirectSound オブジェクトに、DSSCL_PRIORITY 協調レベルを設定する。DSSCL_NORMAL 協調レベルを設定した場合、DirectMusic はプライマリ バッファ フォーマットをアップグレードできない。