どの WaveIn.cs クラスを使用しているかはわかりませんが、通常、オーディオを録音するコードでは、A) コードに録音を開始するように指示し、その後、コードに停止を指示すると、次のいずれかになります。この期間中に記録されたデータを含む配列 (通常は short[] 型) を返します。または B) 指定されたバッファー サイズで記録を開始するようにコードに指示し、各バッファーがいっぱいになると、コードは、いっぱいになったバッファーへの参照を使用して定義したメソッドへのコールバックを作成します。このプロセスは、指定するまで続行されます。録音を停止します。
録音フォーマットがサンプルあたり 16 ビット (別名 2 バイト)、1 秒あたり 44100 サンプル、およびモノ (1 チャネル) であると仮定しましょう。(A) の場合、録音を開始してちょうど 10 秒後に録音を停止するとします。長さが 441,000 (44,100 x 10) 要素の short[] 配列になります。「タップ」を検出するためにどのアルゴリズムを使用しているかはわかりませんが、この配列の要素 0、要素 22,050、要素 44,100、要素 66,150 などでタップを検出するとします。これは、すべてのタップを検出していることを意味します。 5 秒 (22,050 は 1 秒あたり 44,100 サンプルの半分であるため)、つまり、1 秒あたり 2 回のタップがあるため、120 BPM になります。
(B) の場合、44,100 サンプル (別名 1 秒) の固定バッファ サイズで記録を開始するとします。各バッファーが入ってくると、要素 0 と要素 22,050 にタップが見つかります。上記と同じロジックで、120 BPM を計算します。
お役に立てれば。一般的にビート検出では、比較的長い時間記録し、大量のデータ配列からビートをカウントするのが最善です。「瞬間的な」テンポを推定しようとするのは難しく、エラーが発生しやすいのと同じように、録音のピッチをリアルタイムで推定することは、完全な音符を録音する場合よりも困難です。