土曜日, 11月 25, 2006

「なでしこ」で百人一首music その4

「文字を素材に音を作る」部分を関数にしてみたので、プログラムがだいぶすっきりしてきたし、拡張もやりやすくなってきた。

そこで今日は、2つの和歌を定義して、これを素材に琴の二重奏をするプログラムを作ってみる。

和歌を定義している変数と楽譜(MML)を定義している変数を配列にして、2回ループさせてある。

もうひとつ、ループの中で、「(条件式)で条件分岐」という命令を使っている。これは、複数の選択肢の中から条件に合うものだけを実行する(select case 文に相当する)という命令だ。

条件分岐
http://nadesi.com/doc/cmd/doc.cgi?mode=cmd&id=210


//百人一首music_4

音階=区切(『"ミ/"ラ/"シ/ド/ミ/ファ/ラ/シ/`ド/`ミ/`ファ/`ラ/`シ』 "/")
和歌[1]="秋の田の 仮庵の伊庵の 苫をあらみ わが衣出は 露に濡れつつ"
和歌[2]="春過ぎて 夏来にけらし 白砂の 衣ほすてふ 天の香具山"

楽譜[0]="Tempo=60"

2 回
 歌音=""
 回数で条件分岐
  1ならば PAN=000+20
  2ならば PAN=127-20
 歌音変換(和歌[回数],歌音); 楽譜[回数]="TR({回数}) 音色(Koto) P({PAN})"&歌音
 "歌{回数} = "&和歌[回数]を表示
ここまで

楽譜を表示; 楽譜をMML演奏

●歌音変換({参照渡し}和歌,{参照渡し}歌音)
 文字=和歌を文字列分解したもの
 和歌の文字数 回
  弦番号=ASC(文字[回数-1])%13
  もし(文字[回数-1]=" ")ならば
   音符="r4"
  違えば、もし(文字[回数-1]>"ん")ならば
   音符=音階[弦番号]&"2"
  違えば
   音符=音階[弦番号]&"4"
  ここまで
  歌音=歌音&音符

//ここまで



これは、なかなか面白いです。和歌の部分を色々変更して楽しんでみましょう。