DSBCAPS
DSBCAPS 構造体は DirectSound バッファ オブジェクトの能力を指定する。IDirectSoundBuffer::GetCaps メソッドで使われる。
typedef struct {
DWORD dwSize;
DWORD dwFlags;
DWORD dwBufferBytes;
DWORD dwUnlockTransferRate;
DWORD dwPlayCpuOverhead;
} DSBCAPS, *LPDSBCAPS;
typedef const DSBCAPS *LPCDSBCAPS;
メンバ
- dwSize
- この構造体のサイズ。単位はバイト。この構造体を使う前に、このメンバを初期化しなければならない。
- dwFlags
- バッファ オブジェクトの能力を指定するフラグ。
- DSBCAPS_CTRL3D
- バッファは 3D コントロール能力を備えている。
- DSBCAPS_CTRLFREQUENCY
- バッファは周波数コントロール能力を備えている。
- DSBCAPS_CTRLPAN
- バッファはパン コントロール能力を備えている。
- DSBCAPS_CTRLVOLUME
- バッファはボリューム コントロール能力を備えている。
- DSBCAPS_CTRLPOSITIONNOTIFY
- バッファは位置通知能力を備えている。VxD ドライバでは、このフラグで作成されたサウンド バッファは常にソフトウェア バッファになる。これは、VxD ドライバ モデルが通知をサポートしないためである。ハードウェアが利用可能な場合は、WDM ドライバにより、通知可能なバッファがハードウェアに存在することがある。このフラグは、DSBPLAY_LOCHARDWARE フラグが IDirectSoundBuffer::Play メソッドに渡された場合に、メソッドが失敗する原因となる。
- DSBCAPS_GETCURRENTPOSITION2
- IDirectSoundBuffer::GetCurrentPosition では、再生カーソルの新しい動作を使うべきである。DirectX 1 の DirectSound では、エミュレートされたサウンド カード上で再生カーソルは実際に再生されているサウンドよりはるかに前方にあり、書き込みカーソルの直後に置かれていた。以後のバージョンでは、DSBCAPS_GETCURRENTPOSITION2 フラグを指定すると、アプリケーションはより正確な再生位置を取得できる。このフラグを指定しない場合、互換性を保つ目的で以前の動作が維持される。このフラグは、エミュレートされたサウンド カードにのみ影響を及ぼす。DirectSound ドライバが存在する場合、DirectX のどのバージョンでも、DirectSound の再生カーソルは正確な位置を示す。
- DSBCAPS_GLOBALFOCUS
- このバッファはグローバルなサウンド バッファである。このフラグを設定すると、ユーザーが他のアプリケーションにフォーカスを移動し、その新しいアプリケーションが DirectSound を使う場合でも、DirectSound を使っているアプリケーションは引き続きそのバッファを再生できる。1 つの例外は、協調レベルで DSSCL_WRITEPRIMARY フラグを設定した DirectSound アプリケーションにフォーカスを移動した場合である。この場合、他のアプリケーションからのグローバルなサウンドは聞こえなくなる。
- DSBCAPS_LOCDEFER
- 再生時、バッファはハードウェアまたはソフトウェアのリソースに割り当てられる。
- DSBCAPS_LOCHARDWARE
- バッファはハードウェア ミキシングを使う。
- DSBCAPS_LOCSOFTWARE
- バッファはソフトウェア メモリ内にあり、ソフトウェア ミキシングを使う。
- DSBCAPS_MIXIN
- バッファは他のバッファからの送信を受け取ることができる。
- DSBCAPS_MUTE3DATMAXDISTANCE
- サウンドは、最大距離で無音になる。最大距離を超えるとバッファの再生が停止するので、プロセッサ時間を消費しないですむ。
- DSBCAPS_PRIMARYBUFFER
- このバッファはプライマリ サウンド バッファである。この値を指定しない場合、セカンダリ サウンド バッファが作成される。
- DSBCAPS_STATIC
- バッファはオンボード ハードウェア メモリにある。
- DSBCAPS_STICKYFOCUS
- バッファはスティッキー フォーカスを備えている。ユーザーが DirectSound を使っていない他のアプリケーションに切り替えた場合、バッファは引き続き音を出す。ただし、ユーザーが他の DirectSound アプリケーションに切り替えた場合、バッファは無音になる。
- dwBufferBytes
- このバッファのサイズ。単位はバイト。
- dwUnlockTransferRate
- IDirectSoundBuffer::Unlock を呼び出したときにデータをバッファ メモリに転送する速度。単位は 1 秒あたりのキロバイト (KB/s)。高性能のアプリケーションはこの値を使って、IDirectSoundBuffer::Unlock を実行するのに必要な時間を決定できる。システム メモリ内に配置されているソフトウェア バッファの場合、処理が不要なので転送速度は非常に高い。ハードウェア バッファの場合、バッファをサウンド カードにロードしなければならない可能性があるので、転送速度はより遅くなる可能性がある。その結果、転送速度が制限されることがある。
- dwPlayCpuOverhead
- 処理のオーバーヘッド。これは、サウンド バッファをミキシングするのに必要なメイン処理サイクルのパーセンテージである。ハードウェア バッファの場合、サウンド デバイスがミキシングを行うので、このメンバは 0 である。ソフトウェア バッファの場合、このメンバの値はバッファ フォーマットとシステム プロセッサの速度に依存する。
注意
DSBCAPS 構造体は、IDirectSound::CreateSoundBuffer メソッドに渡される DSBUFFERDESC 構造体に似た情報と、それ以外のいくつかの追加情報を保持している。追加情報として、バッファの位置 (ハードウェアまたはソフトウェア) と、いくつかのコスト測定値、たとえば、バッファがハードウェアに配置されている場合はダウンロード時間、ソフトウェアでバッファをミキシングする場合は再生処理のオーバーヘッドなどが挙げられる。
注 : DSBCAPS 構造体の dwFlags メンバが保持するフラグは、DSBUFFERDESC 構造体で使われるフラグと同じものである。唯一の違いは、DSBCAPS 構造体ではバッファの場所に応じて DSBCAPS_LOCHARDWARE と DSBCAPS_LOCSOFTWARE のどちらかが指定されることである。DSBUFFERDESC 構造体ではこれらのフラグはオプションであり、フラグの指定に応じて、バッファをハードウェアとソフトウェアのどちらかに強制的に配置できる。
DSBCAPS_CTRLPOSITIONNOTIFY フラグで作成されたサウンド バッファには、通知イベントを設定しなければならない。このフラグでサウンド バッファを作成し、何も通知を設定しないと、動作が定義されず、サウンドが 2 回再生されることがある。
Windows NT/2000 : Service Pack 3 を適用した Windows NT バージョン 4.0 以降が必要。
Windows 95/98 : Windows 95 以降が必要。Windows 95 用に再配布可能な形で使用可能。
ヘッダー : dsound.h で宣言。
参照
IDirectSound::CreateSoundBuffer、IDirectSoundBuffer::GetCaps