やっぱり恋しいPLAY文

N66Basicの時代にPLAY文で死ぬほどMMLをやってきたためか、やはり逐行実行のほうが生産性が上がるかもしれないということに思い至りました。そこで助っ人としてpythonを久々に使用して、こんなものを。

#coding:shift_jis
import os,string
#空の配列を8トラック分作る
song =[]
for x in range(8):
	song.append('')
def play(track):
	for ch,seq in enumerate(track):
		song[ch] +=seq
def cmd_play():
	for i in song:
		if i <> '':
			print i + ';'
if __name__ == '__main__':
	play(['t97','t97','t97'])
	play(['l8o6rdf+abrrb baf+ef+raf+rf+f+f+eedeeaf+ed1','l2o5reeddeef+f+','l2o4rb<c+>abb<c+>aa'])
	cmd_play()

play関数で各チャンネルに次々と文字列を連結して行って、最後にcmd_play関数ではてなMML対応の形に整形して標準出力に出します。
Mac OS Xには標準出力をクリップボードに送り込む「pbcopy」というコマンドがあるので、例えばこのスクリプトをcmdplay.pyとしますと、ターミナルで以下のような命令を実行して

% python cmdplay.py | pbcopy

クリップボードMMLを送ることが出来ます。
あとはid:Untouchableさんが作られたMMLエディタ(http://d.hatena.ne.jp/Untouchable/20071012/1192190220)を開いてペーストして、ためしに鳴らして見る、といった作業を続けて行きます。
ちなみにこのcmdplay.pyで生成されるMMLはこんな感じです。

t97l8o6rdf+abrrb baf+ef+raf+rf+f+f+eedeeaf+ed1;
t97l2o5reeddeef+f+;
t97l2o4rb<c+>abb<c+>aa;

以上、さっき考えて(この程度でも参考書片手に30分かかりましたが)みたことをメモとして。
将来的にはMMLの標準コマンド(繰り返しとかマクロとか)をはるかに凌ぐことが出来るようになるかもしれません。