単純なプログラムですが、MIDIノート番号を周波数に、周波数をMIDIノート番号とピッチベンド値(およびセント値)に変換するものを置いておきます。特に後者はあまり見かけないと思うので。デフォルト設定は、基準ピッチが440Hz、ベンドレンジは±2半音です。
function f=note2freq(n) %NOTE2FREQ Convert MIDI note number to frequency % f=note2freq(n) converts MIDI note number to frequency. % 'A' note above the center 'C' correspond to the note number 69 % (concert pitch is set to 440Hz by default). concert_pitch = 440; f = concert_pitch * 2 .^ ((n - 69)/12);
function [n,pb,cent]=freq2note(f) %FREQ2NOTE Convert frequency to MIDI note number % [n,pb,cent]=freq2note(f) converts frequency to the closest MIDI note % number with pitch bend value for finer control. 'A' note above the % center 'C' correspond to the note number 69 (concert pitch is set to % 440Hz by default). The default pitch bend range is 2 half tones above % and below. Cent value is returned as well. concert_pitch = 440; bend_range = 2; % 2 half tones below/above x = log2(f / concert_pitch) * 12 + 69; n = round(x); pb = (x - n) * 8192 / bend_range * 2; cent = (x - n) * 100;
平均率だけじゃなく、オプションで純正調だったりが出せると良いんですが、それは別の機会に。