バッファの概念
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 メソッド |