2

プラグインギターから入力を取得し、そこから周波数を取得して、ユーザーが正しい音を演奏しているかどうかを確認しようとしています。ギター チューナーのようなもの (ギター チューナーも必要です)。

私の最初の質問は、ギター入力の周波数をリアルタイムで取得するにはどうすればよいですか?

そして、次のようなことは可能ですか:

if (frequency == noteCFrequency)
{
//print This is a C note!!
}

サウンドカードから入力を取得し、入力音をすでに録音および再生できるようになりました。

4

3 に答える 3

1

他の回答は、これを行う方法を実際には説明していません。彼らは腕を放棄しているだけです。たとえば、これらの回答を読んでも、FFT の出力が一連の複素数であることがわかりません。また、それらを解釈する手がかりもありません。

さらに、FFT は利用可能な最良の方法ではありませんが、目的には問題なく機能し、ほとんどの人はそれが最も直感的であると感じています。とにかく、この質問は死ぬまで尋ねられたので、SO に関する他の質問を紹介します。すべてが C# に当てはまるわけではありませんが、最初に (重要な) 概念を理解する必要があります。これらの質問に対する回答を読み、リンクをたどることで、質問に対する回答を見つけることができます。

ダミーの周波数/ピッチ検出

Androidで1/4秒ごとにオーディオファイルの周波数を取得する

iPhoneで音の周波数/ピッチを検出する方法は?

Androidで音の周波数を計算するには?

各FFT計算で異なる元の周波数を取得し、Javaで周波数漏れなしで取得する方法

于 2013-01-27T15:52:49.500 に答える
1

C# での FFT の実装については、こちらを参照してください。FFT を使用するために FFT を完全に理解する必要はないと思いますが、いくつかの基本的な制限について知っておく必要があります。

  1. 常にサンプル ウィンドウが必要です。スライディング ウィンドウがあるかもしれませんが、ここで高速であることの本質は、信号のチャンクを取得してエラーを受け入れることです。
  2. 正確な周波数ではなく、周波数の「バケット」があります。結果は、「420Hz - 440Hz の範囲で、信号の 30% を持っている」のようなものです。(バケツの「幅」は調整可能でなければなりません)
  3. ウィンドウ サイズには、2 の累乗であるサンプル数が含まれていなければなりません。
  4. ウィンドウ サイズは、検出する最長波長の少なくとも 2 つの波長である必要があります。
  5. 最高周波数は、サンプリング レートによって決まります。(これはあまり気にしなくていいです)
  6. 周波数をより正確に分離したいほど、ウィンドウは長くなります。
于 2013-01-27T14:01:46.763 に答える
0

信号の一部の FFT (高速フーリエ変換) を計算し、ピークを探す必要があります。FFT の種類、ウィンドウ タイプ、ウィンドウ サイズなどについては、信号処理に関するドキュメントを読む必要があります。とにかく 25 ミリ秒のウィンドウで問題ありません。たとえば、ハミング ウィンドウを使用します。ネット上には、FFT を計算するためのコードがたくさんあります。幸運を!

于 2013-01-27T11:06:18.747 に答える