読者です 読者をやめる 読者になる 読者になる

Matlab/Octaveで平均律

単純なプログラムですが、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;

平均率だけじゃなく、オプションで純正調だったりが出せると良いんですが、それは別の機会に。