Microsoft DirectX 8.0 (Visual Basic) |
独立したサウンド全体を保持するセカンダリ バッファを、スタティック バッファという。同じバッファを異なるサウンドで再利用することもできるが、通常はデータを一度だけスタティック バッファに記述する。
スタティック バッファはストリーム バッファと同様に作成および管理される。違いはバッファの使い方だけである。スタティック バッファは一度書き込まれて演奏されるが、ストリーム バッファは演奏中に定期的にデータが更新される。
注 スタティック バッファは必ずしも、DSBCAPS_STATIC フラグをバッファ記述に設定することで作成されるわけではない。このフラグは、現在の多くのハードウェアでは使用できない、サウンド カード上でのメモリ割り当てを要求する。スタティック バッファはシステム メモリ内に置かれ、DSBCAPS_LOCHARDWARE または DSBCAPS_LOCSOFTWARE のどちらかのフラグで作成される。詳細については、「ISA および PCI カードでのボイス管理」を参照すること。
スタティック バッファは、DirectSound8.CreateSoundBufferFromFile または DirectSound8.CreateSoundBufferFromResource のどちらかのメソッドの呼び出しを使って作成され、データが書き込まれる。
次のサンプル コードは、リソース ファイルで "bounce" として識別されるウェーブからスタティック バッファを作成する。m_ds は DirectSound8 オブジェクトと仮定する。
Dim dsbd As DSBUFFERDESC Dim dsbBounce As DirectSoundSecondaryBuffer8 dsbd.lFlags = DSBCAPS_CTRLVOLUME Set dsbBounce = m_ds.CreateSoundBufferFromResource( _ vbNullString, "bounce", dsbd)
リソース ファイルは実行可能ファイルにコンパイルされているので、モジュール名を与える必要はない。同様に、メソッドがデータのサイズからバッファのサイズを決定するので、DSBUFFERDESC 型の lBufferBytes メンバの値も設定する必要はない。WAVEFORMATEX 型は、リソースに格納されたヘッダーからウェーブ フォーマットについての情報を受け取る。
バッファを再生するには、次のように DirectSoundSecondaryBuffer8.Play を呼び出す。
dsbResource.SetCurrentPosition 0 dsbResource.Play 0
この例では DSBPLAY_LOOPING フラグを設定していないので、バッファは最後に到達すると自動的に停止する。また、DirectSoundSecondaryBuffer8.Stop を使うとバッファを早めに停止できる。バッファを早めに停止する場合は、再生カーソルがその場所にとどまる。したがって、例の DirectSoundSecondaryBuffer8.SetCurrentPosition に対する呼び出しは、バッファが始めから開始することを保証するものである。
また、DirectSound8.CreateSoundBuffer を使って空のスタティック バッファを作成した後、DirectSoundSecondaryBuffer8.WriteBuffer メソッドを使ってメモリのほかの位置からデータを書き込むこともできる。
セカンダリ バッファへの書き込みについては、「ストリーム バッファの使い方」を参照すること。