27

歌っているユーザーのピッチ検出をリアルタイムで実行しようとしていますが、多くの問題が発生しています。FFT( FFT問題(ランダムな結果を返す))や自己相関(自己相関ピッチ検出はマイク入力でランダムな結果を返す)など、さまざまな方法を試しましたが、良い結果を得る方法がないようです。誰かがリアルタイムのピッチ追跡の方法や、私がすでに持っている方法を改善する方法を提案できますか?リアルタイムのピッチ検出に適したC/C++メソッドが見つからないようです。

ありがとう、

ニール。

編集:注意するために、マイク入力データが正しいこと、および正弦波を使用した場合の結果が多かれ少なかれ正しいピッチであることを確認しました。

編集:申し訳ありませんが、これは遅れていますが、現時点では、結果の配列と各インデックスから値を取り出し、X軸にインデックスをプロットし、Y軸に値をプロットすることで自動照合を視覚化しています(両方をで割っています) 100000か何か、そしてOpenGLを使用しているim)、データをVSTホストにプラグインし、VSTプラグインを使用することは私には選択肢ではありません。現時点では、ランダムなドットのように見えます。私はそれを正しく行っていますか、それともそれを行うためのコードを教えてください、または生のオーディオデータと自己相関データを視覚化する方法を理解するのを手伝ってください。

4

12 に答える 12

35

一歩下がって... これを機能させるには、このプロセスの中間ステップをプロットする方法を見つけなければなりません。あなたがやろうとしていることは特に難しいことではありませんが、エラーが発生しやすく、手間がかかります。クリッピング、ウィンドウ処理、不適切な配線、エイリアシング、DC オフセット、間違ったチャンネルの読み取り、奇妙な FFT 周波数軸、インピーダンスの不一致、フレーム サイズのエラーなど、誰にもわかりません。しかし、生データをプロットしてから FFT をプロットできれば、すべてが明らかになります。

于 2009-08-30T19:16:57.660 に答える
21

リアルタイム ピッチ トラッキングのオープン ソース実装をいくつか見つけました。

  • dywapitchtrackは Wavelet ベースのアルゴリズムを使用します

  • 「Realtime C# Pitch Tracker」は、Codeplex から削除された修正自己相関アプローチを使用しています - GitHubで検索してみてください

  • aubio (piem による言及。いくつかのアルゴリズムが利用可能)

リアルタイム用に設計されていないピッチ トラッカーもいくつかありますが、私が知る限りそのように使用できる可能性があり、リアルタイム トラッカーを比較するための参照としても役立つ可能性があります。

于 2011-09-09T03:10:45.453 に答える
5

数年前に行ったプロジェクトでマイク入力に同様の問題がありました.DCオフセットが原因であることが判明しました.

FFT または使用しているその他の方法を試みる前に、バイアスを必ず取り除いてください。

また、ヘッドルームまたはクリッピングの問題が発生している可能性もあります。

グラフは、オーディオに関するほとんどの問題を診断するための最良の方法です。

于 2009-08-30T16:22:53.610 に答える
2

リアルタイムリアルディテクタのJavaコードは、http://code.google.com/p/freqazoid/で入手できます。

これは、2008年以降のリアルタイムJavaを実行しているすべてのコンピューターでかなりうまく機能します。プロジェクトは中止され、関係者は誰でも取り上げることができます。詳細が必要な場合は、私に連絡してください。

于 2012-01-16T20:04:00.303 に答える
2

このサンプル アプリケーションを見てください。

http://www.codeproject.com/KB/audio-video/SoundCatcher.aspx

アプリは C# であり、C++ が必要であることに気付きました。これは .Net/Windows であり、Mac を使用していることに気づきました...しかし、彼の FFT 実装が出発点になる可能性があると考えました。あなたの FFT 実装を彼のものと比較してみてください。(彼は Cooley-Tukey の FFT の反復的な幅優先バージョンです)。それらは似ていますか?

また、あなたが説明している「ランダムな」動作は、バイト配列から値を適切に組み立てずに、サウンドカードから直接返されたデータを取得しているためである可能性があります。サウンド カードに 16 ビット値をサンプリングするように要求し、値を格納するバイト配列を指定しましたか? その場合、返された配列内の連続する 2 バイトが 1 つの 16 ビット オーディオ サンプルを構成することに注意してください。

于 2010-09-02T02:33:32.277 に答える
2

aubioと、ピッチ トラッキングのための最先端の方法がいくつか含まれているオープン ソース ライブラリをチェックしてください。

于 2009-12-10T17:43:55.500 に答える
1

ここで同様の質問をしました:

C/C++/Obj-C リアルタイム アルゴリズムにより、ボーカル入力からノート (ピッチではない) を確認

編集:

Performousには、リアルタイムのピッチ検出用の C++ モジュールが含まれています

またピッチ追跡アルゴリズム

于 2010-11-19T01:11:38.573 に答える
1

TarsosDSP https://github.com/JorenSix/TarsosDSPを使用して、歌手の声であっても、リアルタイムのピッチ検出を行うことができます 。 まだ誰も聞いていない場合に備えて:-)

于 2021-01-11T22:35:40.440 に答える
0

楽器チューナーから何かを適応させることはできますか? 私の素晴らしくコンパクトなギター チューナーは、弦のピッチをかなり正確に検出することができます。アルゴリズムをある程度説明するピアノ調律師へのこの参照が表示されます。

于 2009-08-30T15:50:38.370 に答える