A tiny MML parser
MMLを読み込ませると、ノートナンバーと発音時間を返してくれる、処理系に依存しない汎用パーサーです。
Source Codes(リンク先の”Source Codes (Version 0.2.0)”ってやつ)をダウンロードしてきて解凍、
mml.c,mml.h,ntlib.c,ntlibc.hの4ファイルをArduinoのlibrariesフォルダに”mml”とかフォルダ作って入れて、
Arduinoからmml.hをincludeしたら普通に使えました。
(この時ついでにkeywords.txtも入れとくと、型と関数が色分けされて便利)
とりあえず普通にtone()関数で音を鳴らします。
あ、ノートナンバーから周波数を出すための配列用にnotes.hも用意します。
const int notes[] = { 0, 9, 9, 10, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 28, 29, 31, 33, 35, 37, 39, 41, 44, 46, 49, 52, 55, 58, 62, 65, 69, 73, 78, 82, 87, 93, 98, 104, 110, 117, 124, 131, 139, 147, 156, 165, 175, 185, 196, 208, 220, 233, 247, 262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494, 523, 554, 587, 622, 659, 699, 740, 784, 831, 880, 932, 988, 1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1976, 2093, 2218, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951, 4186, 4435, 4699, 4978, 5274, 5587, 5920, 6272, 6645, 7040, 7459, 7902, 8372, 8870, 9397, 9956, 10548,11175, 11840, 12544 };
スケッチはこんな感じ。
#include <mml.h> #include "notes.h" const byte SND_OUT = 11; MML mml; MML_OPTION mmlopt; char *text = "o5 l8 def+ae2 >dc+<bf+a2 b>c+d<a4d4. gf+d<a2r b4>c+4d4g4 f+gaf+ef+ge <b>gf+<a>e4c+4 d4<a>ed2"; static void mml_callback(MML_INFO *p, void *extobj) { switch (p->type) { case MML_TYPE_NOTE: { MML_ARGS_NOTE *args = &(p->args.note); snd(notes[args->number], args->ticks * 2); } break; case MML_TYPE_REST: { MML_ARGS_REST *args = &(p->args.rest); delay(args->ticks); } break; } } void snd(int hz, int ms) { int len = ms / 4 * 3; tone(SND_OUT, hz, len); delay(ms); } void setup() { mml_init(&mml, mml_callback, 0); MML_OPTION_INITIALIZER_DEFAULT(&mmlopt); } void loop() { mml_setup(&mml, &mmlopt, text); while (mml_fetch(&mml) == MML_RESULT_OK); }
11番ピンとGNDにスピーカーをつなぐとこんな音が鳴ります。
1音のみで映える曲つったらこれだろう、というわけでファミコンのMOTHERより「Eight Melodies」です。
MMLはニコニコ大百科のピコカキコを参考にしました(音長が違ってたので、そこは直しました)。
ピコカキコ(FlMML)とtinymmlでは、オクターブシフトの記号(<>)が逆なので注意。FlMMLで言う「OCTAVE REVERSE」がtynymmlでのデフォルトになります。
ゲームが好きな人もそうでない人も、一度はこのサウンドトラックを聴いておいた方が良いと思います。
こちらの記事もおすすめ。
語り継がれる名作『MOTHER』からの25年 鈴木慶一×田中宏和 – 音楽インタビュー : CINRA.NET
ほぼ日刊イトイ新聞 – MOTHERの音楽は鬼だった。