3

ピッチではなく、歌われた音のピッチクラスを検出したい。

したがって、C4 であるか C5 であるかは重要ではなく、両方とも C として検出される必要があります。

時計の文字盤に配置された 12 の半音を想像してみてください。針はピッチ クラスを指しています。それが私が求めているものです!理想的には、歌われたノートがぴったり合っているか、わずかにずれているかを判断できるようにしたいと考えています。

これは、次の制約が導入されているため、以前に尋ねられた質問の重複ではありません。

  1. 音源は単一の人間の声であり、バックグラウンド干渉が無視できることを願っています (ただし、これに対処する必要があるかもしれません)。

  2. オクターブは重要ではなく、ピッチクラスのみが重要です

編集 -- リンク: Apple FFT および Accelerate Framework を使用した
リアルタイム ピッチ検出

4

9 に答える 9

6

ピッチは人間の心理的知覚現象です。ピーク周波数の内容は、ピッチまたはピッチ クラスと同じではありません。FFT および DFT メソッドはピッチを直接提供するのではなく、周波数のみを提供します。ゼロクロス測定も、人間の音声ソースにはうまく機能しません。AMDF、ASDF、自己相関、またはケプストラム法を試してください。ピッチ推定に関する学術論文もたくさんあります。

ピッチ推定アルゴリズムの別の長いリストがここにあります。

編集された追加: Apple の SpeakHere および aurioTouch サンプル アプリ (iOS デベロッパー センターから入手可能) には、iPhone のマイクから PCM サンプル ブロックを取得するためのサンプル ソース コードが含まれています。

于 2010-10-31T16:11:47.600 に答える
3

ピッチ クラスを探している場合は、クロマグラム ( http://labrosa.ee.columbia.edu/matlab/chroma-ansyn/ )を確認する必要があります。

また、単純に f0 を検出して ( YIN アルゴリズムのようなものを使用)、適切な半音を返すこともできます。基本的な周波数推定アルゴリズムのほとんどは、オクターブ エラーに悩まされています。

于 2012-08-10T10:23:09.697 に答える
2

最後に、 DSP Dimensionのこの記事のおかげで、これについては締めくくりました。

この記事にはソースコードが含まれています。

基本的に彼はFFTを実行します。それから彼は、それらが落ちるビンの中心と一致しない周波数は、一種のベル型の曲線で近くのビンを塗りつぶすだろうと説明します。そして彼は、2番目のパス(FFTが最初のパス)でこのデータから正確な周波数を抽出する方法を説明します。

その後、記事はさらにピッチシフトに進みます。コードを削除するだけです。

それらは、同じこと(およびはるかに多く)を非常に最適化しただけの商用ライブラリを提供していることに注意してください。おそらく私が必要とするすべてを実行するライブラリの無料バージョンがありますが、私はiOSオーディオサブシステムを介して作業したので、自分で実装した方がよいでしょう。

記録のために、ここでビンとその2つの隣接するビンの二次曲線を近似することにより、正確な頻度を抽出する別の方法を見つけました。これら2つのアプローチの相対的な精度はわかりません。

于 2010-11-19T01:03:27.727 に答える
2

情報を見つけ次第載せます…

ウィキペディアのピッチ検出アルゴリズムは、開始するのに適した場所です。オクターブの決定に失敗するいくつかの方法がリストされていますが、これは私の目的には問題ありません。

自己相関の適切な説明はここにあります(ウィキペディアはなぜそのように単純化できないのでしょうか??)。

于 2010-10-31T14:39:35.860 に答える
2

入力波形のサンプルに対して離散フーリエ変換を実行し、異なるオクターブの同等の音に対応する値を合計します。最大値を優勢周波数とします。

ニーズに合った既存の DFT コードが Objective C で見つかる可能性があります。

于 2010-10-31T09:09:51.247 に答える
1

他の人が述べたように、ピッチ検出アルゴリズムを使用する必要があります。その根拠は十分にカバーされているので、私はあなたの質問のいくつかの詳細に対処します. あなたは音符のピッチクラスを探していると言いました。ただし、これを見つける方法は、音符の周波数を計算し、テーブルを使用してピッチ クラス、オクターブ、およびセントに変換することです。基本周波数を見つけずにピッチ クラスを取得する方法を知りません。

リアルタイムのピッチ検出アルゴリズムが必要になります。アルゴリズムを評価する際には、希望する精度と比較して、各アルゴリズムが暗示するレイテンシに注意してください。一部のアルゴリズムは他のアルゴリズムよりも優れていますが、基本的には一方を他方と交換する必要があり、両方を確実に知ることはできません。ハイゼンベルグの不確実性原理のようなものです。(サイクルのほんの一部しか聞こえていないのに、どのようにしてノートが C4 であるとわかるのでしょうか?)

あなたの「スムージング」アプローチは、音声の周波数特性を変更するデジタルフィルターと同等です。つまり、ピッチを推定しようとする試みを妨げる可能性があります。デジタル オーディオに興味がある場合、デジタル フィルターはその分野の基本的かつ有用なツールであり、魅力的なテーマでもあります。それらを理解する上で強力な数学のバックグラウンドを持っていると役立ちますが、基本的な考え方を理解するために必ずしも必要ではありません。

また、ゼロクロス法は、波形の周期とピッチを推定するための基本的な手法です。この方法で実行できますが、多くのヒューリスティックと微調整が必​​要です。(基本的に、いくつかの「候補」ピッチを作成し、支配的なピッチを推測してみてください。これを混乱させる多くの特殊なケースが発生します。簡単なものは「s」が少ないです。)周波数領域のピッチ検出アルゴリズムから始めます。

于 2010-11-01T22:44:31.090 に答える