問題タブ [pitch-detection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - FFT の結果は、使用しているコンピューターによって異なります
Unity3D を使用したピッチ検出プロジェクトに取り組んでいます。私はコーディング、ユニティ、および現在取り組んでいる他のほとんどすべてのことに非常に慣れていません! :-) この Web ページに出会い、プロジェクトで FFT コードを使用しています。
http://www.kaappine.fi/tutorials/fundamental-frequencies-and-detecting-notes/
ほとんど問題なく動作していますが、使用しているコンピューターによって検出される周波数が異なるようです。さまざまなデスクトップとラップトップ(PCとMacの混合)で試してみましたが、一部のコンピューターでは正しい周波数を拾いましたが、他のコンピューターでは約10の周波数が得られました。1.5半音フラット。興味深いのは、私が試した 6 台のコンピューターのうち、3 台は正しく、残りの 3 台はすべて同じ 1.5 半音フラットだったことです。
一部のコンピューターの内蔵マイクと別のマイクの両方を試しましたが、結果は変わりませんでした。
これの理由と、問題を解決する方法を知っている人はいますか? コードに調整を加えることはできますか? 私が取り組んでいるプロジェクトは、最終的には iPhone アプリとして配布される予定なので、デバイス間で普遍的に動作する必要があります。
ちなみに私は今のところC#プログラミング言語しか使えません。
ヘルプとアドバイスをお寄せいただきありがとうございます
幸運をお祈りしています
フィル
matlab - Matlab - FFT をよりよく理解し、ピッチを見つける
FFT からピッチを見つけることに関するトピックがたくさんあることは知っています。データ サンプルを時間領域から周波数領域に変換することで、プロセス全体を十分に理解できましたが、まだいくつかの領域があります (おそらくより高度な)私は少し立ち往生しています。
私は現在のプロセスを一歩一歩進んでいきますので、誰かが私がどこで間違っているのかを理解するのを手伝ってくれることを願っています!
始める前に、ここで使用している例は、Logic で作成した Wav ファイルです。これは、A スケールのピアノ プリセットであり、キー A4から始まり、単にスケールを上げます (A4、B4、C#) 5、D5...) 120 bpmで合計4 秒間、半小節ごとに. 役立つ場合は、wav へのリンクを次に示します。
ステップ 1:
メタデータと実際のサンプル データを解析します。メタデータ:
channels => 2,
sample_rate => 44100,
byte_rate => 176400,
bits_per_sample => 16,
data_chunk_size => 705600,
data => ...
ステップ 2: 2 つのチャネルがあるため、対応するサンプル データでいっぱいの左右の配列を用意し、それぞれを FFT に通します。各 FFT の結果から、特定の周波数の振幅と位相がわかります
ステップ 3:
各 FFT の最大振幅を見つける必要があります。これを行うには、実数/複素数の結果のすべての大きさを見つけてから、最大値を見つけます。私はMatlabを使って私を助けているので、max(abs(fft(data)))
. 各 FFT の最大値を見つけて得た値は1275.6と1084.0 でした。
ステップ 4: それぞれの FFT からそれらの最大値のインデックスを見つけ、マッピングされた周波数領域値のそのインデックスで周波数を見つけます。これにより、 1177.0 Hzと1177.5 Hzが得られました。
迷っているところです!時間領域グラフをプロットし、周期を見て A4 の周期を知るだけでピッチがA4であることがわかりましたが、 FFT。私を指すための助け/場所は大歓迎です!
signal-processing - ピッチ検出のためにケプストラムを実行する方法
わかりました、ここにはたくさんの質問があり、グーグルにはたくさんの読み物がありますが、どういうわけかこれを理解することができません. 音声セグメントの基本周波数を取得したい。基本的な手順は次のとおりです。
- ウィンドウ処理された信号の FFT を取る
- FFT を直角座標から極座標に変換します (マグニチュードを取得できます)。
- フェーズ情報を破棄します
- 二乗してから、大きさの各ビンの自然対数を取る
- 別の FFT を取得します (または、一部の情報源は逆 FFT を取得すると言いますか?)
AS3でこれを実装した方法は次のとおりです。
これを実行してFFTを取得して終了すると、プロットするとビンが逆の順序になっているように見えますか? また、基本波よりも 2 次高調波に大きなピークが見られます。これを行って逆 FFT を実行すると、N/2 付近で反射されたように見えるオーディオ信号が得られ、再びピークが反転しているように見えます。全体もかなりうるさいです。私は何を間違っていますか?
matlab - MATLAB 片対数スケーリング
私は MATLAB を初めて使用し、マイク入力に基づいて人間の声の周波数を処理するプログラムに取り組んでいます。私が直面している最大の問題は、音符 (このプロジェクトで扱っているもの) の周波数が指数関数的に増加することです。音階の半音ごとに約 1.059463^x です。
私が扱っているプログラムでは、検出された周波数が対応する音符番号に近づくようにグラフをスケーリングするだけでなく、音符と音楽セントの観点から音符番号を操作できるようにデータをスケーリングする必要があります。そのため、周波数グラフを簡単に MIDI データに変換できます。
私が見つけた他の唯一のオプションは、記録された周波数を比較するための周波数のライブラリを作成することでしたが、それは不必要に複雑で時間がかかります.
つまり、本質的には、周波数が 110Hz の A2 がノート番号 45 に対応するようにデータをスケーリングしようとしています。これを行う方法はありますか?
javascript - ピッチ検出 - 音符のカウント
自己相関アルゴリズムを使用してモノフォニック サウンド (ハミング、口笛) のピッチ検出を実行していますが、私がやろうとしていることに十分な結果が得られます。しかし、 GF# D#という音符でメロディーを口笛で吹いて結果をログに記録すると、次のシーケンスが得られます。
2x F#
3x G
14x F#
54x G
14x G#
2x D
52x F#
6x G
14x F#
3x G
2x G
28x D#
2x D
33x D#
4x D
16x D#
2x E
2x D
2x D#
正しい音符が認識され、より多くの繰り返しがあることがわかります。それが実際の音符であるか、単なるトランジションであるかをどのように判断できますか? その配列に適用して実際のノート GF# と D# のみを取得できるフィルタはありますか?
私はこのjavascriptコードを使用しています: https://github.com/cwilso/pitchdetectピッチ検出を実行するために、ノートをフィルタリングするために結果に適用できる後処理アルゴリズムがあるかどうか、または持っているかどうか疑問に思っています自己相関アルゴリズムのウィンドウを増やします。
信号処理に関するそのスレッド(https://dsp.stackexchange.com/questions/16753/how-to-get-the-melody-from-a-signal)で受け入れられた回答は、モードを適用する単純な後処理のようなものに言及していますピッチの結果シーケンスをフィルタリングします。このモード フィルターは何でしょうか。
audio - .wav ファイルからの TarsosDSP ピッチ検出。そして、結果の頻度は常に半分未満です
TarsosDSP ライブラリを使用して .wav ファイルからピッチを検出しようとしていますが、周波数の結果は常に半分未満です。
これが私のコードです。
329.wav ファイルは、http://onlinetonegenerator.com/ Web サイトから 329Hz で生成されます。結果のピッチが常に 164.5Hz になる理由がわかりません。私のコードに問題はありますか?
python - Pydub の生のオーディオ データ
Python 3.4 で Pydub を使用して、いくつかのオーディオ ファイルのピッチを検出しようとしています。
私は、リアルタイムアプリケーションに対して堅牢なピッチ検出アルゴリズム (McLeod Pitch Method) を使用しています (それを使って Android ピッチ検出アプリを作成しました: https://github.com/sevagh/Pitcha )。
私の問題は、アルゴリズムを AudioSegment._data に適用したときに、アルゴリズムから意味のある出力が得られないことです。
コード:
出力:
同じ wav ファイルをスピーカーから再生し、マイクから録音し、生のマイク キャプチャ (符号付き 16 ビット リトル エンディアン PCM、44100Hz、モノラル) にアルゴリズムを適用すると、正しいピッチが得られます。
AudioSegment._data は期待どおりに返されませんか?