Microsoft DirectX 8.0 (Visual Basic) |
Windows はマルチタスク環境なので、複数のアプリケーションが任意の時点で同じデバイス ドライバを使って動作することがある。DirectX は協調レベルを使って、各アプリケーションが不適切な方法または不適切なタイミングでデバイスにアクセスしないことを保証する。DirectSound の各アプリケーションは、デバイスに対して認められるアクセス範囲を決定する 1 つの協調レベルを持つ。
DirectSound8 オブジェクトを作成した後で、サウンドを再生する前に DirectSound8.SetCooperativeLevel メソッドを使ってデバイスの協調レベルを設定しなければならない。
次の Visual Basic の例では、DirectSound8 オブジェクト m_ds の協調レベルを設定している。hwnd 引数は、アプリケーション ウインドウへのハンドルである。
m_ds.SetCooperativeLevel Me.hWnd, DSSCL_PRIORITY
DirectSound では、DSSCL_NORMAL、DSSCL_PRIORITY、および DSSCL_WRITEPRIMARY の値で表される 3 つのサウンド デバイスの協調レベルを定義している。
注 DirectX 8.0 以前のバージョンで利用可能であった協調レベル DSSCL_EXCLUSIVE は廃止された。DirectX アプリケーションでほかのアプリケーションをミュートすることはできなくなった。排他的レベルを要求するアプリケーションには、代わりに優先レベルが付与される。
標準協調レベルでは、アプリケーションは、プライマリ サウンド バッファのフォーマットの設定、プライマリ バッファへの書き込み、デバイスのオンボード メモリの圧縮が行えない。この協調レベルを使うすべてのアプリケーションは、22kHz、ステレオ サウンド、8 ビット サンプリングのプライマリ バッファ フォーマットを使うので、デバイスはアプリケーション間で最も円滑に切り替えられる。
優先協調レベルで DirectSound デバイスを使うと、アプリケーションはハードウェア ミキシングなどのハードウェア リソースに対して最高の権限を確保し、プライマリ サウンド バッファのフォーマットの設定、デバイスのオンボード メモリの圧縮を行える。
ゲーム アプリケーションは、ほとんどすべての環境で優先協調レベルを使用する。このレベルは、サンプリング レートとビット深度に対するアプリケーション制御を可能にしながら、最も強力に動作する。また、優先協調レベルでは、IP テレフォニなどのほかのアプリケーションからのオーディオをゲームからのオーディオと共に聞くこともできる。
Visual Basic アプリケーションでは、DSSCL_WRITEPRIMARY 協調レベルを使うべきではない。このレベルは、DirectSound ミキサを使用しない特殊なアプリケーション用である。