WaveOut コントロールを用いた再生方法

バッファの概念

WaveOut コントロールには、再生のためのバッファの配列が内蔵されています。このバッファは、コントロール内部で管理されており、それぞれのバッファはインデックスにより識別されます。再生するサウンド データは、このバッファ内に格納します。バッファの個数やサイズは、NumBuffers プロパティ、および BufferSize プロパティにより、自由に設定することができます (ただし、再生中にこれらのプロパティの値を変更することはできません)。

バッファとは
バッファとは

再生のしくみ

まず、再生するサウンド データを SetData メソッドを用いてバッファにコピーします。そして、AddBuffer メソッドを用いて WAVE 出力デバイスにバッファを追加することにより、再生が開始されます。デバイスには複数のバッファを追加することができます。バッファはデバイス内に蓄積され、順次処理されていきます。複数のバッファを貯えておくと、他のアプリケーションがコンピュータに負担のかかるような処理を行っても、再生が途切れにくくなります。

バッファ内にあるデータを再生し終わると、バッファはデバイスから解放され、OnDone イベントが発生します。

解放されたバッファは、AddBuffer メソッドを用いて、再度 WAVE 出力デバイスに追加することができます。このように、バッファを繰り返し使用することにより、途切れのない再生が可能になります。

再生処理の流れ
再生処理の流れ

再生処理の手順

WaveOut コントロールを用いて WAVE サウンドの再生を行うプログラムは、以下のような流れになります。

ステップ処理の内容関連するプロパティ、メソッド
1使用するデバイス ID の設定
サンプリング周波数の設定
チャネル数の設定
量子化ビット数の設定
バッファ サイズの設定
バッファ数の設定
DeviceID プロパティ
SamplesPerSec プロパティ
Channels プロパティ
BitsPerSample プロパティ
BufferSize プロパティ
NumBuffers プロパティ
2デバイスを開くOpen メソッド
3バッファに新しいサウンド データをコピーするSetData メソッド
4バッファをデバイスに追加するPause メソッド
AddBuffer メソッド
初期化処理
ステップ処理の内容関連するメソッド、イベント
5再生を開始するRestart メソッド
6イベント発生 : “データを再生し終わった”
→ ステップ 7 へ
OnDone イベント
7バッファに新しいサウンド データをコピーするSetData メソッド
8バッファをデバイスに追加するAddBuffer メソッド
9ステップ 6 へ
再生の開始とデータの供給
ステップ処理の内容関連するプロパティ、メソッド、イベント
10再生を停止するStop メソッド
11イベント発生 : “再生が終了した”
→ ステップ 12 へ
OnBusyFlagChange イベント
IsBusy プロパティ
12デバイスを閉じるClose メソッド
再生の停止