2017-01-15 8 views
1

私はアンドロイドのプラットフォームでギターのゲームを開発しようとします。アンドロイドでギターのピッチを検出

そして、私はギターコード/弦の周波数を得るためにリアルタイムピッチ検出を行う必要があります。

私は、マイクからの入力を取得し、次に入力(入力演奏ギターの弦/和音の種類)

を分析し、私は私が使用できる方法の2種類を見つけ、一つはYINで、別ます1つはFFTです。

パフォーマンスと正確な結果が得られる方法はどれですか?

+3

あなたの質問はここには含まれません。 http://sound.stackexchange.com/ –

+1

明確な答えはありません。ピッチの検出は正しいことが難しく、人々がこれを結びつけるために多くの多くの方法があります。その理由は、A4のような音程は440Hzの基本周波数を持ちますが、880(および220!Hz)以上の高調波もあります。実際のデータの例:http://stackoverflow.com/questions/39230595/how-to-get-the-fundamental-frequency-using-harmonic-product-spectrum理想的には、これを行うためのAndroidライブラリ/ SDKがあります君は。 –

+0

マイクから入力を取得し、入力(ギター・ストリング/コードの種類を演奏する入力)を分析します、どうすればいいですか? @Ahmed Fasih – paul9508

答えて

1

ピッチ」が本当に何であるかを理解する必要があります(下記のウィキペディアのリンクをご覧ください)。ギターやピアノでシングルノートを作ったとき、聞こえるのは音の振動の1つの周波数だけではなく、数学的に関連する異なる周波数で発生する複数の音の振動の合成です。異なる周波数でのこの複合振動の要素は、高調波または部分音と呼ばれます。たとえば、ピアノのミドルCキーを押すと、コンポジットの高調波の個々の周波数は、基本周波数として261.6Hz、523Hzが第2高調波、785Hzが第3高調波、1046Hzが第4高調波などである。後の高調波は、基本周波数261.6Hz(例:2×261.6 = 523,3×261.6 = 785,4×261.6 = 1046)の整数倍である。

以下はGitHub.comで、Windowsで再生されている間にポリフォニックMP3ファイルでRealtime Pitch Detectionを行うことができるように考案した、珍しい2段階アルゴリズムのC++ソースコードです。この無料アプリケーション(PitchScope Player、ウェブ上で利用可能)は、MP3録音時にギターやサクソフォンソロの音符を検出するために頻繁に使用されます。 Windows用の実行可能ファイルをダウンロードして、選択したmp3ファイルで自分のアルゴリズムを確認することができます。アルゴリズムは、MP3またはWAV音楽ファイル内の任意の所与の瞬間における最も支配的なピッチ(音符)を検出するように設計されている。ノートオンセットは、MP3録音中の任意の瞬間における最も支配的なピッチ(音符)の変化によって正確に推測される。

修正されたDFT対数変換(FFTに似ています)を使用して、ピークレベルの周波数を探すことによってこれらの可能な高調波を最初に検出します(下図参照)。変更されたLog DFTのデータを収集する方法のために、私はWindowing Functionをシグナルに適用する必要はなく、追加とオーバーラップも必要ありません。そして、DFTを作成して、周波数チャンネルを対数的に配置して、ギター、サクソフォンなどのノートで高調波が生成される周波数に直接合わせます。

私のピッチ検出アルゴリズムは実際には2段階のプロセスです(ScalePitchには12の可能なピッチ値があります:{E、F、F、G、G#、A、A#、B、C、C#、D、D#})b)ScalePitchが決定された場合、オクターブは、4つの可能なオクターブ - 候補音のすべての高調波を調べることによって計算される。アルゴリズムは、ポリフォニックMP3ファイル内の任意の所与の瞬間における最も支配的なピッチ(音符)を検出するように設計されている。これは通常、インストゥルメンタルソロの音符に相当します。私の2段階ピッチ検出アルゴリズムのC++ソースコードに興味がある人は、GitHub.comのSPitchCalc.cppファイル内のEstimate_ScalePitch()関数から始めたいと思うかもしれません。以下は

https://github.com/CreativeDetectors/PitchScope_Player

https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection

ポリフォニックmp3記録上のギターのソロの3秒間(私のC++ソフトウェアで作成された)対数DFTのイメージがあります。それは、ソロを演奏しながら、ギターの個々の音符の高調波がどのように表示されるかを示します。この対数DFT上の各音符について、各ハーモニックは同じ時間幅を持つため、垂直方向に伸びる複数のハーモニクスを見ることができます。音符のオクターブが決定された後、我々は基本音の周波数を知る。そのノートのScalePitchが決定された後

enter image description here

以下の図は、(すなわち、正しい基礎である)私が正しいオクターブ候補音符を選択するために開発されたオクターブ検出アルゴリズムを実証します。 C++のそのメソッドを見たい人は、FundCandidCalcer.cppというファイル内のCalc_Best_Octave_Candidate()関数に行き、GitHubのソースコードに含まれていなければなりません。

enter image description here

関連する問題