1

私は MATLAB を初めて使用し、マイク入力に基づいて人間の声の周波数を処理するプログラムに取り組んでいます。私が直面している最大の問題は、音符 (このプロジェクトで扱っているもの) の周波数が指数関数的に増加することです。音階の半音ごとに約 1.059463^x です。
私が扱っているプログラムでは、検出された周波数が対応する音符番号に近づくようにグラフをスケーリングするだけでなく、音符と音楽セントの観点から音符番号を操作できるようにデータをスケーリングする必要があります。そのため、周波数グラフを簡単に MIDI データに変換できます。
私が見つけた他の唯一のオプションは、記録された周波数を比較するための周波数のライブラリを作成することでしたが、それは不必要に複雑で時間がかかります.
つまり、本質的には、周波数が 110Hz の A2 がノート番号 45 に対応するようにデータをスケーリングしようとしています。これを行う方法はありますか?

4

1 に答える 1

0

これはあなたが望むことだと思います:

f = 110; %// frequency in Hz
n = log10(f/440)/log10(2)*12+69; %// 440 Hz (note A4) is note 69
note = round(n);
cents = round((n-note)*100);

f = 110:

note =
    45
cents =
     0

f = 345与える

note =
    65
cents =
   -21

このリファレンスこのコンバータに従ってください。

于 2015-04-01T12:28:58.243 に答える