Platform SDK: DirectX |
アプリケーションが DirectSound を初期化すると、DirectSound はサウンドのミキシングと出力デバイスへの送信をするために、プライマリ サウンド バッファの作成と管理を自動的に行う。
アプリケーションは、個々のサウンドの保存と再生をするために、少なくとも 1 つのセカンダリ サウンド バッファを作成しなければならない。この方法の詳細については、「セカンダリ バッファの作成」を参照すること。
セカンダリ バッファは、アプリケーションが動作している間常に持続することも、不要になったときに削除することもできる。セカンダリ バッファには、ゲーム中の効果音など繰り返し再生される 1 つのサウンドを格納したり、適宜新しいデータを記録することもできる。アプリケーションは、セカンダリ バッファに記憶されているサウンドを 1 つのイベント、または連続再生されるループ サウンドとして再生できる。サウンド ファイルのデータが非常に大きく、メモリに記憶しておくことが実用的ではない場合、データをストリームするためにセカンダリ バッファを利用できる。
IDirectSound::DuplicateSoundBuffer メソッドを使って、複数のセカンダリ バッファを同じ物理メモリ内に作成できる。プライマリ サウンド バッファは複製できない。元のバッファがハードウェア メモリに置かれていて、重複バッファ用のハードウェア リソースが利用不可能な場合は、この呼び出しは失敗する。同様に、たとえ呼び出しが成功したとしても、実際に重複バッファが元のバッファとメモリを共有するとは限らないので、これらの変更がすべての重複バッファに反映されるであろうという予測のもとにバッファを変更するべきではない。
DirectSound.DuplicateSoundBuffer メソッドを使って、複数のセカンダリ バッファを同じ物理メモリ内に作成できる。プライマリ サウンド バッファは複製できない。元のバッファがハードウェア メモリに置かれていて、重複バッファ用のハードウェア リソースが利用不可能な場合は、この呼び出しは失敗する。
異なるセカンダリ バッファのサウンドは、これらを同時に再生するだけでミキシングできる。処理能力の限界内であれば、任意の数のセカンダリ バッファを同時に再生できる。
DirectSound ミキサーの遅延時間は 20 ミリ秒の短さなので、再生開始までの遅れは感知できない。この状態では、アプリケーションがバッファを再生し、即座に画面でアニメーションを開始すると、オーディオとビデオは同時にスタートするように見える。ただし、DirectSound がハードウェア機能をソフトウェアでエミュレートしなければならない場合は、ミキサーは短い遅延時間を達成できず、サウンドが再生されるまでにやや長め (標準では 100〜150 ミリ秒) の遅れが生じる。
通常、開発者はプライマリ バッファを意識する必要はまったくない。DirectSound が内部で管理を行う。しかし、アプリケーションが固有のミキシングを行う場合は、開発者がプライマリ バッファに直接書き込みを行う必要がある。これを行うと、セカンダリ バッファを同時には利用できない。詳細については、「プライマリ バッファへのアクセス」を参照すること。