周波数と音階とMMLと
とある仕事でとある音が鳴るデバイスをいじった。そのデバイスは周波数を設定できるだけなので、周波数と音階の関係を調べてみたら、平均律では、とある周波数f(Hz)の音の半音上の音の周波数は、f×2-1/12(Hz)だって。ほうほう。おもしれぇ~
せっかくなのでMML(=Music Macro Language)風の命令を作ってみた。ファミリーベーシックとかで音鳴らして遊んでた!なつかしー。"L8G<CCCCCCCDEDCCR2"みたいなね。何の曲でしょう?
例の計算式を、デバイスの周波数範囲全部で計算して配列に入れておく(都度計算するかどうかは処理速度とメモリ容量でお好みで)。正確には、その周波数に対応したデバイスのレジスタ設定値、ってことだけど。実行させると、MMLのテキストから音階を抜き出して、その音階に対応する周波数を配列から取り出して、デバイスにセット。指定音長分待つ。以上。みたいなカンタンなプログラムだけど、ちゃんと音楽になった。おもしろい。