3

私は単純なチューナーを作成しようとしています(いいえ、さらに別のチューナーアプリを作成するためではありません)、AurioTouchサンプルソースを調べています(誰かがこのコードにコメントしようとしましたか??)。

私の心配は、周波数領域のグラフを見ると、aurioTouchが実際にはうまく機能していないように見えることです。楽器で1つの音を演奏しましたが、音の適切な周波数に1つの弦のピークがある、きちんと整理された小さな周波数のセットが表示されません。

基礎となるコードが機能しているかどうか、またはそれが単なる粗いサンプルであるかどうかを知るのに十分なaurioTouchを使用した人はいますか?

私が持っている他のオプションは、FFTWまたはKISSFFTを使用することです。誰かがそれらの経験がありますか?

ありがとう。

4

4 に答える 4

9

あなたは間違ったことを期待しています!

図書館のせいではない

ライブラリが適切に生成するかどうかに関係なく、実際のサウンドにはめったに存在しないパターンを探しています。電子的に生成された完全な正弦波のみが、周波数に部分的に離散的に現れる「スパイク」を引き起こします。グラフ。信じられない場合は、winampまたはメディアプレーヤーで「スペクトルアナライザ」の視覚化を起動してみてください。それはそれほどPCのせいではありません。

本当の音波は複雑な動物です

あなたの心の目に鋸歯状または正方形の波を想像してください。それらの鋭いターンアラウンド-波のコーナーまたはポイントは、FFTまたは実際のフーリエに対してさえも大量の高調波のように見えます。また、スコープで実際の「sqaure wave / sawtooth」、または正弦波を生成するはずの楽器によって生成された「sine wave」を見たことがあれば、鋭い隅や隙間をすべて見てください。 1つのノート(スコープがない場合は、大胆な波にズームインするだけです。ズームするほど、見ているノートが高くなります)。はい、それらの偏差はすべて周波数としてカウントされます。

スペクトル分析では、1つの音符とオーケストラ全体の違いを区別するのは難しい場合があります。

しかし、私は単一のメモを聞きます!

では、耳はどのようにそれを行うのでしょうか?波形全体を考慮します。次に、下脳は入力が何であるかについて上脳に横たわります。倍音の混乱ではなく、1つの音符です。

あなたはそれを完全に行うことはできませんが、「トレーニング」を介してそれを概算することができます。

近似:いくつかのスマートを構築する

楽器のノートを演奏し、周波数グラフを「保存」します。いくつかの周波数範囲のノート、またはより良いのはすべてのノートに対してこれを行います。

次に、メモを補間して、その機器用に保存されたグラフに2 ^(1/12)(または1/4ステップの場合は1/24など)を掛けて、ギャップを埋めます(1/2または1/4ステップ)。

BSTやトライなどのすばやく検索可能なデータ構造にそれらを格納する方法を理解します。'これがどれだけ近いか'のスコアを返す必要があるのはそれだけです。それが異なるボリュームで来た場合には、頻度の比率によっても一致を識別する必要があります。

スマートを使用する

次回その楽器からの音符を探しているときは、「聞いた」周波数グラフを取り、そのデータ構造でそれを見つけてください。さまざまな波形を作成するいくつかの楽器を録音して、それらを検索することもできます。背景音や複数の音がある場合は、最も近い音を選びます。次に、他の音符を識別したい場合は、サンプリングされた音符から見つかった周波数パターンを「減算」し、すすぎ、泡立てを繰り返します。

それはあなたの声では機能しません...

あなたがギターチューナーに歌って自分自身をチューニングしようとしたことがあれば、チューナーがその賢いものではないことを知っているでしょう。もちろん、一部の楽器(音声esp)は実際にピッチの周りを浮遊し、(誰かが歌わなくても)絶えず進化する波形を生成します。

何を達成しようとしていますか?

「シンプルな」チューナーアプリでは、このような凝ったものを完全に手に入れる必要はありませんが、別のチューナーアプリだけを作成していない場合は、実際にノートを識別したいと思います(たとえば、ラジオの曲;-)

幸運を。私はあなたがあなた自身を転がす代わりにこのすべてのがらくたをする図書館を見つけることを望みます。

2017年を編集

このWebページに注意してください:http://www.feilding.net/sfuad/musi3012-01/html/lectures/015_instruments_II.htmページ のかなり下に、さまざまなオルガンパイプのスペクトル分析があります。多くの倍音があります。これらは、十分な作業で、最初にアプリを「トレーニング」することで検出できます(子供に言うのと同じように、「これはクラリネットのように聞こえます...」)

于 2010-07-15T01:10:01.377 に答える
4

周波数軸が線形スケールであるため、aurioTouchは奇妙に見えます。x軸が対数スケール(従来はlog2)以外の場合、FFT出力を解釈することは非常に困難です。

aurioTouchのinteger-FFTを使用できない場合は、私のライブラリをチェックしてください:http: //github.com/alexbw/iPhoneFFT

倍精度を使用し、複数のウィンドウタイプをサポートし、ウェルチ法を実装します(これにより、時間の経過とともにより安定したスペクトルが得られるはずです)。

@zaph、FFTは真の離散フーリエ変換を計算します。これは、デジタル信号のビット単位の表現を利用する単純な効率的なアルゴリズムです。

于 2009-12-05T19:48:46.637 に答える
2

FFTは周波数ビンを使用し、ビンの周波数幅はFFTパラメーターに基づいています。周波数を見つけるには、サンプルに存在する最高周波数の少なくとも2倍のレートでサンプリングされた周波数を記録する必要があります。次に、サイクル間の時間を見つけます。それが純粋な周波数でない場合、これはもちろん難しいでしょう。

于 2009-09-20T15:10:57.370 に答える
0

Ooura FFTを使用して、アクセラレータデータのFFTを計算しています。常に正しいスペクトルが得られるとは限りません。何らかの理由で、Ooura FFTは、すべての周波数で10^200のオーダーのスペクトルの大きさで完全に間違った結果を生成します。

于 2010-03-17T15:25:44.623 に答える