NEWS

IchigoJamで電子楽器を操作#7(MML解読プログラムを作るに脱線)

2022.5.28

前回のプログラム「MML解析プログラムの骨格」ができました。今回はオクターブ変更の処理を追加してみます。

早速、いつも通りルールの話になりますが、鍵盤中央付近のドに相当するノート番号は60となっています。では1オクターブ上下するとノート番号はどうなるでしょうか?MIDIのノート番号一覧を見ればすぐわかりますが、ドからシまでの鍵盤を数えると12鍵(白鍵・黒鍵含めて)あります。と言うことは1オクターブは現在値から12ズレれば良いことが分かります。そのため1オクターブの処理はノート番号に12を加減算すればいいことになりますね。現状ではを発音するとノート番号は60です。1オクターブ上げた時に72にしたいのですが、これ結構簡単で、ノート番号変換用に用意した配列の値をこのように変更します。

LET[65],9,11,0,2,4,5,7

この配列を使って「ド」を変換すると「0」になります。そこにオクターブ用の変数「O」を用意して、先ほど取得した「0」と加算します。

N=[67]+O

もし変数Oが60だったら変数Nは60になりますよね。変数Oを12ずつ変更すればオクターブ処理は完了です。低音から高音までこの数式だけで完結します。では、前回のプログラムでコメントだけ書き込んでいた80行をこのように変更します。

80 O=O+((M==62)-(M==60))*12

IchigoJamのMMLとオクターブの上げ下げ記号が逆ですが、自分が最初に触ったMMLはこちらだったのでそのようにします。
たったこれだけで、MMLに「'>'が見つかったらオクターブを上げる、'<'が見つかったらオクターブを下げる」の処理が完成しました。が・・・発音する部分にオクターブを反映しなければいけません。

160 ? CHR$(#90,N+O,127)・・・鍵盤を押す
170 WAIT 60・・・待つ
180 ? CHR$(#80,N+O,127)・・・鍵盤を離す

これでドレミファソラシの音階に相当する変数Nオクターブ情報の変数Oを加算したものがノート番号として送信されます。

今回はここまで。
前回言ったように「骨格」はできているので、このような単純な変更だけで機能追加ができました。
もちろん追加機能によっては、複雑な場合もありますが、肝となる規則をしっかり理解して、その通り作れば後で楽できる証拠です。
次回の音長は複雑です・・・

次へ(IchigoJamで電子楽器を操作#8)