2011-12-20 3 views
1

ランダムなナチュラルノートを表示し、そのノートをギターで弾くのを待つプログラムを書いています。オーディオ入力は、正しいピッチが演奏されたかどうかを見るために処理され、そうであれば、次の音符が表示され、ユーザのスコアが更新されます。基本的なギターノートを教えることです。Qt4とSFMLピッチの認識と処理

私は、音声処理にSFMLを、GUIにQT4を使用するつもりです。私は、関連するQObjectクラスとSFMLクラスから派生したウィジェットを持っています。

質問:SFMLを使用してマイク入力のピッチを検出するにはどうすればよいですか?単純に入力の一部をsf :: soundオブジェクトに格納してgetPitch()メソッドを呼び出すことはできますか?

+0

qt4タグは削除されました。質問は関連していません –

答えて

0

結局のところ、SFMLは内蔵のピッチを検出するための任意のアルゴリズムを持っていない右方向に働いて私の心を取得するためのLBGへの感謝を。 SFMLはサウンドを記録してバッファに格納するのに必要なツールのみを提供します。

周波数のバッファを評価するために高速フーリエ変換を使用できることがわかりました。次いで、この周波数は、ピッチ閾値と共に既知のピッチ周波数のリストと比較することができる。

SFMLにはfftアルゴリズムが組み込まれていませんが、サウンドバッファを取得するために必要なツールはあります。私はこれが最もクロスプラットフォームな方法であるかどうかをチェックして調べなければならないでしょう。

1

入力の一部をsf :: soundオブジェクトに保存してgetPitch()メソッドを呼び出すことはできますか? sf::SoundSourceから

GetPitch()あなたはSetPitch(pitch)かtehのデフォルト1.0fに使用される値を返します。それは、音を編集することです、それについての情報を得ることではありません。私はそれを行う唯一の方法は、サウンドサンプルの配列を取得し、何らかのアルゴリズムで処理することだと思います。あなたはそれで、この配列を取得することができます

sf::SoundBufferRecorder recorder; 
recorder.Start(); 
// ... 
recorder.Stop(); 
const sf::SoundBuffer& buffer = recorder.GetBuffer(); 

size_t   sample_count  = buffer.GetSamplesCount(); 
const sf::Int16* samples   = buffer.GetSamples(); 
unsigned int  samples_per_second = buffer.GetSampleRate(); 
+0

ありがとうございます。私はこれの間接的な結果として、サウンドバッファのFFTについて知っていました。 – Adam

関連する問題