次の方法で共有


バッファー管理

IDirectSoundBuffer8::GetCaps メソッドは、DirectSoundBuffer オブジェクトの機能を取得します。

アプリケーションは、IDirectSoundBuffer8::GetStatus メソッドを使用してバッファーが再生中かどうか、または停止しているかどうかを決定できます。

バッファー内のサウンド データのフォーマットに関する情報を取得するには、IDirectSoundBuffer8::GetFormat メソッドを使用します。また、IDirectSoundBuffer8::SetFormat を使用してプライマリ バッファーのサウンド データのフォーマットを設定することもできます。詳細については、「サウンドのミキシング」を参照してください。

    SetFormat メソッドは、セカンダリ バッファーでは呼び出すことができません。セカンダリ バッファーが作成されると、そのフォーマットが固定されます。別のフォーマットでサウンドを再生するには、このフォーマットで新しいサウンド バッファーを作成する必要があります。

特定の状況では、サウンド バッファーのメモリーが失われることがあります。たとえば、サウンド カードのメモリーにバッファーが配置されていて、別のアプリケーションがハードウェア リソースの制御を取得している場合などです。また、プライマリ協力型レベルのアプリケーションがフォアグラウンドに移動するときにも喪失が発生します。この場合、フォアグラウンド アプリケーションがプライマリ バッファーに直接書き込むことができるように、DirectSound は他のすべてのサウンド バッファーを失わせます。

失われたバッファーに対して IDirectSoundBuffer8::Lock または IDirectSoundBuffer8::Play メソッドが呼び出されると、DSERR_BUFFERLOST エラー コードが返されます。喪失を発生させたアプリケーションがその協力型レベルを書き込みプライマリから下げる、またはバックグラウンドに移動すると、その他のアプリケーションは、IDirectSoundBuffer8::Restore メソッドを呼び出すことでバッファー メモリーの再割り当てを試すことができます。再割り当てが成功すると、このメソッドはバッファー メモリー、およびそのバッファーに対するその他のすべての設定 (ボリューム設定やパン設定など) をリストアします。ただし、リストアされたバッファーは、有効なサウンド データを含まないことがあります。そのため所有しているアプリケーションはバッファーにデータを再度書き込む必要があります。