8

こんにちは、私はオーディオ関連のコーディングの初心者で、ピッチ トラッキング DLL に取り組んでいます。この DLL を使用して、ビデオ ゲーム ロックスミスの一種のオープン ソース バージョンを学習体験として作成しようとしています。

これまでのところ、FFT を機能させることができたので、ピッチ周波数 (Hz) を検出できます。次に、アルゴリズムと下の表を使用して、オクターブ (2 番目から 6 番目) とノート (C から B) を決定できます。ノートを再生しました。

次のステップは、フレットを特定できるように弦を検出することです。

ここに画像の説明を入力

私はそれについて考えてきましたが、理論的にはこれで作業できます。ユーザーが正しい音符を演奏しているときはわかりますが、Hz を使用するだけではゲームが検出できないため、ゲームは「ハック」になる可能性があります。ノートは右の弦で演奏されます。たとえば、5 弦 + 1 フレット = C4 261.63Hzは、6 弦 + 5 フレット = C4 261.63Hzに等しくなります。

ユーザーが間違った弦で音符を弾いて正しく弾く可能性は低いですが、ユーザーが間違った弦を弾いたときにエラー フィードバックをユーザーに提供できるように、弦を知ることは本当に良いことだと思います (弦を上下に移動する必要があります)。

文字列を検出するために何ができるか知っていますか? 前もって感謝します :)

[編集]

使用しているギターと弦は音色に影響を与えるため、音色を分析することは弦を検出する簡単な方法ではないようです。

「ギターの音色のバリエーションは、ピックアップのデザインと位置、使用される木材 (木材の種類が異なります!) によるギターの自然な共鳴とダンピング、およびその構造と形状、弦のゲージと使用年数、演奏テクニック、弦をどこでフレットして弾くかなどです。」

4

3 に答える 3

3

投稿が1年前なので、これは少し遅いかもしれません. しかし、ここに解決策があります。これは、ギターのピッチ検出に関する長い研究の末に見つけたものです。

これがFFTが機能しない理由です:

結果は線形配列になり、サウンドは対数的に計算されるため(音符間の指数関数的距離)、FFTを使用することはできません。さらに、FFTは、周波数が存在する可能性のあるビンの配列を提供しますが、正確な結果は得られません。

これは私が提案するものです:

dywapitchtrack を使用します。FFT のような大きなビンを計算する代わりに、ウェーブレット アルゴリズムを使用するライブラリです。

説明: dywapitchtrack は、非常に高品質のカスタム調整アルゴリズムに基づいています: 非常に正確 (精度 < 0.05 半音)、非常に低いレイテンシ (< 23 ミリ秒)、非常に低いエラー率の両方。人間の声で徹底的にテストされています。これは、動的ウェーブレット アルゴリズム (dywa) として最もよく説明できます。

ダウンロード: https://github.com/inniyah/sndpeek/tree/master/src/dywapitchtrack

USE (C++): 必要な場所に .c と .h を配置し、プロジェクトにインポートします。

ヘッダファイルをインクルード

//Create a dywapitchtracker Object
dywapitchtracker pitchtracker;

//Initialise the object with this function
dywapitch_inittracking(&pitchtracker);

バッファがいっぱいの場合 (バッファは 44100 の解像度と 2 のべき乗の長さである必要があります。私の場合は 2048 です):

//use this function with your buffer
double thePitch = dywapitch_computepitch(&pitchtracker, yourBuffer, 0, 2048);

そしてほら、thePitch には必要なものが正確に含まれています。(不明な点があれば遠慮なく質問してください)

于 2014-11-11T03:17:29.470 に答える
2

単純な FFT ピーク推定器は、多くの潜在的に強い倍音があるため、ギター ピッチ検出器/推定器としては適していません。より堅牢なピッチ推定アルゴリズムが存在します (stackoverflow および DSP.stackexchange を検索)。しかし、プレーヤーがゲームを開始する前に、開放型とフレット型の両方の個々の楽器の各弦を事前に特性化する必要がある場合、これらの特性化の FFT フィンガープリントは、一部のギターの異なる弦で演奏された同じ音を区別できる可能性があります。より太い弦は、より高い倍音のいくつかでわずかに異なる比率のエネルギーを放出し、わずかな不協和音の量も異なります。

于 2013-09-09T18:17:29.883 に答える