#概要
wemosでmml鳴らしてみた。
#配線
出力は、D9を、そのまま。
パソコン用スピーカーで鳴らす。
#写真
#波形
#利用したライブラリー
tiny mml parser
#サンプルコード
#include "mml.h"
const byte SND_OUT = 2;
MML mml;
MML_OPTION mmlopt;
char * text = "t110 l8 r4rcf4.ffedcd4.ccr>a<cd4dddfde>a2 r4a<cd4dfg4fef4edd4rcd4rddafg2. r4rcf4.ffedcd4.ccr>a<cd4dddfde>a2 r4a<cd4dfg4fef4edd4rcd4rddafg2.";
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
};
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()
{
Serial.begin(115200);
mml_init(&mml, mml_callback, 0);
MML_OPTION_INITIALIZER_DEFAULT(&mmlopt);
Serial.println("start");
}
void loop()
{
mml_setup(&mml, &mmlopt, text);
while (mml_fetch(&mml) == MML_RESULT_OK);
}
#動画
以上。