2011-09-11 3 views
0

私は既にプレーヤーのプログラム、波形生成器、スペクトルアナライザ、時間が記録されるリストボックスを持っています。これらのものは機能しています。今、オーディオファイルを再生し、特定のしきい値またはスペクトルの最大ピークに達したときに、その現在のイベントの時間がリストボックスに記録されるように、機能を追加します。私はリストボックスに時間を追加することができたので、私の唯一の問題はイベントの検出方法です。私はスペクトラムアナライザでFFTを使用しましたが、私はこれに固執しました。 FFT、波形ジェネレータ、スペクトラムアナライザなどの現在のリソースを使って、これをどうやって行うことができますか?大きな音でトリガーされたイベントのように、オーディオのスペクトラムが特定の高さに達したときにイベントをキャッチするにはどうすればよいですか?

これは私が必要なものであるが、

  1. 私はオーディオやサウンドを再生

    が特定のしきい値に達し、ストリームの現在の時刻が記録されます。

ありがとうございました。私のデッドラインは36時間後になります。すべての助けに感謝します。私の未来はこれに依存しています。私に幸運を。 :) みんなありがとう!私にサンプルや正確なことを教えてください。自分のプロジェクトにさらに情報が必要な場合は、私のリソースを提供します。ありがとう!神のご加護を。

P.S.このプロジェクトにはスネアドラム検出器が必要です。しかし、私はスネアを検出するのではなく、スペクトルの最高峰であるため、スネアドラムはベース、シンバルなどの他の楽器よりも最高のピークを生成するため、時間がかかりませんでした。みんなありがとう!

+0

に関連する問題の一種です。私はまたcodeprojectからプロジェクトSoundCatcherを見た。しかし、それは私のコードの構造が違うので私を助けませんでした。私はちょうどC#の初心者です。 –

+0

スペクトルの最大ピークはどういう意味ですか?特定の周波数でピークを探していますか?または、ただ1つの周波数でですか?そうでない場合は、時間領域で信号電力を計算できます。 – hotpaw2

答えて

0

継続的に更新するスペクトルを生成できる限り、更新が終わるたびにスペクトルを反復し、関連するビンの大きさを確認するだけで済みます。通常は、各サンプルウィンドウをオーバーラップさせることがあります。 FFTのサイズとサンプルウィンドウのサイズがN = 1024の場合、サンプル0..1023を最初にFFTし、次のブロックは512..1535になります。この50%のオーバーラップは、検出のレイテンシを減らすのに役立ちます(オーバーラップを大きくすることができますが、あまりにも大きくなると計算が集中する可能性があります)。

0

スネアドラムを検出する最も簡単な方法は、入力信号とスネアドラムヒットの記録の相互相関を計算することです。相互相関が高い場合は、一致する可能性が高いです。

これは、FFTが入力信号と純粋な正弦波との相互相関を計算するため、FFTのテストより優れています。

このアプローチは"matched filtering"と呼ばれ、最適検出理論ではよく知られています。

0

信号が非常に強力になったときだけ見たい場合は、FFTは必要ありません。時間と周波数の領域のパワーに関連するParseval's Theoremを使用することができます。これにより、平方標本の移動平均からO(1)スライディングウインドウエネルギー検出器を作成することができます。

ところで、これはまさに私がNAudioライブラリを使用していthe DSP Stack Exchange

関連する問題