WaveIn コントロールを用いた録音方法

バッファの概念

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

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

録音のしくみ

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

バッファがデータでいっぱいになると、バッファはデバイスから解放され、OnDone イベントが発生します。解放されたバッファには録音されたデータが格納されているので、このデータを GetData メソッドで配列変数にコピーします。配列変数にコピーされたデータは、その後自由に扱うことができます。

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

録音処理の流れ
録音処理の流れ

録音処理の手順

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

ステップ処理の内容関連するプロパティ、メソッド
1使用するデバイス ID の設定
サンプリング周波数の設定
チャネル数の設定
量子化ビット数の設定
バッファ サイズの設定
バッファ数の設定
DeviceID プロパティ
SamplesPerSec プロパティ
Channels プロパティ
BitsPerSample プロパティ
BufferSize プロパティ
NumBuffers プロパティ
2デバイスを開くOpen メソッド
3バッファをデバイスに追加するAddBuffer メソッド
初期化処理
ステップ処理の内容関連するメソッド、イベント
4録音を開始するStart メソッド
5イベント発生 : “バッファがデータでいっぱいになった”
→ ステップ 6 へ
OnDone イベント
6録音されたデータを取得
必要に応じて、データを処理または保存する
GetData メソッド
7バッファをデバイスに追加するAddBuffer メソッド
8ステップ 5 へ
録音の開始とデータの取得
ステップ処理の内容関連するプロパティ、メソッド、イベント
9録音を停止するStop メソッド
10イベント発生 : “録音が終了した”
→ ステップ 11 へ
OnBusyFlagChange イベント
IsBusy プロパティ
11デバイスを閉じるClose メソッド
録音停止処理