そこで、ピアノの録音に含まれる周波数を検出する MATLAB プログラムを作成しました。次に、これらの検出された周波数を対応するピアノの音に変換する必要があります。
A4(440Hz)を基準音として、それを基に残りを導き出すという理論があることは知っています。しかし、ルックアップテーブルを見て、それぞれのピアノの音符を直接呼び出すことができるルックアップテーブルのようなものを探しています。どうすればいいのかよくわからないので、何ができるかについていくつか提案をしたいと思います...ありがとう
そこで、ピアノの録音に含まれる周波数を検出する MATLAB プログラムを作成しました。次に、これらの検出された周波数を対応するピアノの音に変換する必要があります。
A4(440Hz)を基準音として、それを基に残りを導き出すという理論があることは知っています。しかし、ルックアップテーブルを見て、それぞれのピアノの音符を直接呼び出すことができるルックアップテーブルのようなものを探しています。どうすればいいのかよくわからないので、何ができるかについていくつか提案をしたいと思います...ありがとう
ここから(Google の最初のヒットだけで、特別なことは何もありません)、平均律のすべての音符のすべての周波数が次のように関連していることがわかります。
f = f0 · 2^(i/12)
f0 = A4 = 440
Hz、およびベースi
ノートから半音離れた数。LUT
これにより、すべてのメモのルックアップ テーブル ( ) を作成できます。
少し手間をかける必要があるのは、次のとおりです。
今日はあなたの幸運な日です (私は退屈で先延ばしにしています :) ので、C0 から E8♭ までのメモのかなり完全な実装を次に示します。
% Your frequencies (can be of any size, must be in Hz)
V = [17 450 4000];
% Generate the lookup table
LUT = 440 * (2^(1/12)).^(-57:42);
% The names of all those notes
noteNames = {...
'AN' 'AN♯/BN♭' 'BN' 'CN' 'CN♯/DN♭' 'DN' 'DN♯/EN♭' 'EN' 'FN' 'FN♯/GN♭' 'GN' 'GN♯/AN♭'};
allNotes = [];
for ii = 0:8
allNotes = [allNotes regexprep(noteNames, 'N', num2str(ii))]; end %#ok<AGROW>
allNotes = allNotes(4:end-4);
% Indices into the lookup table
[~,I] = min(abs(bsxfun(@minus, V(:), LUT)), [], 2);
% The named noted corresponding to your frequencies
allNotes(I)