"TSS Clipborad Player"でMSX版ZANACの曲を聞く
年末休みに家でネットをしてる時(年末でなくてもやっているが)、友人に"TSS Clipborad Player"(以下TSSCP)を教えてもらいました。
MMLで書いた音楽データを、コピー(クリップボードに入れる)だけで演奏できるツールです。素晴らしい!

解析中のZANACのサウンドデータを元に、いくつかの曲を懐かしいMMLに手作業で変換してTSSCPに演奏させてみたのですが、割と労力の要る作業でした。
そこで、ZANACサウンドデータから、TSSCP準拠MMLへの変換を自動化する方法を考えました。


さっそく聞いてみよう
  mmlmacro-zanac.xls (mmlmacro-zanac.lzh : ファイルサイズ 85,775バイト)

LZH形式で圧縮された、Microsoft Excel2000形式ファイルです。
展開後、生成されたmmlmacro-zanac.xlsファイルをExcelで開いてください。
その際、「〜はマクロを含んでいます・・・」というダイヤログが表示されますが、「マクロを有効にする」を選択してください。

【使い方】
(1)TSSCPを起動しておき、mmlmacro-zanac.xlsファイルをExcelで開きます。

(2)「処理対象ファイルフルパス」ボタンを押すと、参照ダイヤログが表示されます。MSXのZANACのROMイメージファイルを指定してください。

(3)「デコード開始」ボタンを押すと、「曲データNo.」欄の曲がデコードされます。

(4)デコードされたMMLをTSSCPでコピーしましょう。音楽が演奏されます!!!

(5)「曲データNo.」欄に値を入力するか、左右の矢印で変化させるかすると、別の曲を選択できます。


【注意点】
これらは仕様です。

・1面の曲などの、本来無限ループするはずの曲が、一回の演奏でそのまま終了してしまいます。そんなときは、各行の頭"t108%0@1v15"の後に$マーク(ループ先頭を表す記号)を入れてみてください。

・ノイズ音は鳴りません。

・いくつか、演奏できない曲もあります。ちょっと修正してやると演奏可能になるかもしれません。(オクターブ範囲越え、ボリューム相対変化"(",")"コマンドの誤りなど)


変換プログラムについて、と反省
ZANACのサウンドデータをMMLに変換、出力しています。
変換元のデータがどんな構造なのか知りたい!かつ、多少わかりにくい文章でもかまわない!という奇特な方は、こちらもご参照いただくといいでしょう。

変換アルゴリズムについては、ExcelのVBエディタで見てみてください。ただし、謙遜ではなくとても洗練されているとは言えず、見にくいことと思いますが・・・

今回、一番の失敗は「Excelを使ったこと」そのものと言えます。
当初は、汎用で使えるサウンドデータ→MMLコンバーターを目指し、「変換用のテーブルをExcelシートとすることで、メンテナンス性の向上!」とかを狙っていたのですが、 結局、公開しているExcelブックではそこまで作りこんでいません。どうもVBAのクセにはついていけないところがあります。

【参考・VBAおよびExcelの不思議な挙動】
(1)以下の文を、サブルーチンもしくは関数内で実行してみてください。

Dim tempA, tempB
tempA = "A0FF"
tempB = Val("&H" & tempA)
MsgBox Hex(tempB)

出力される結果としては、当然"A0FF"を期待するところですが、なぜか"FFFFA0FF"が表示されます。
なぜVal関数は、tempBの上位2バイトをFFFFでパディングするのでしょうか?????

(2)Excelで、同一セル内で"."(ピリオド)を3つ以上続けて入力すると、"・・・"に変換されます。しかも勝手に!


また、Excelが入っていないPCで本ページを閲覧されている方、誠に申し訳ありません。
学校や会社のPCなどでMML出力のみを行い、演奏はマイPCで実行されるなどで対処ください。


おまけについて
この時期のCOMPILE社のゲームは、ほぼ同じサウンドドライバが使用されていました。
制御コード、音長テーブルが一部異なる他、ほぼ同じアルゴリズムでMMLへの変換が可能なようです。

ただし、あくまで「おまけ」ですので演奏できないデータがいくつかあります。
初代ガーディックに思い入れのあった皆様には申し訳ないですが、私、ガーディックといえば「ガーディック外伝」(※)だったもので・・・

(※)シューティングとRPGを組み合わせた全く新しい・・・わけでもないゲーム。女の子が戦闘機に変形しますが、どうみても顔面が機体の下に露出していました。


(2006/03/27)


トップへ戻る