プチコンバータv0.8.4ではMMLの変換 (SB3からSB4の一方向) を実装してます。
またPETITC/RUNTIME.LIBをEXECした上で、外部からMMLの変換処理を呼び出すことができます。
引数1つ、戻り値 (OUT引数) 1つのごくシンプルなDEFで、それぞれ入力 (SB3) と出力 (SB4) のMML文字列となります
MML4$=PCMML_MML3TO4(MML3$)
プチコンバータがMMLを変換する際、対象のMMLは字句解析した上で、次の処理を行っています
- マクロの宣言を先頭へ
- @コマンド 144〜151を216〜223に
- Qコマンドの値を4倍に
- 音符、Lコマンドの音長を192の約数に
- ダブルシャープとダブルフラットを解消
- 調号と音長の順番を正規化 (調号を音長の前へ置く)
- @MONコマンドの削除
ただし、プチコンバータの変換には次のような問題点があります
- 音長を192の約数に直す処理が間違っている?
- Nコマンドの音長が処理されない
- ダブルシャープとダブルフラットの処理が雑
- 削除されている@MONはSB4にも存在する
さらに、次の仕様が考慮されていません (変換が全く実装されていない)
- SB4で@VとVの意味が入れ替わった
- タイがポルタメントに優先しなくなった
- ポルタメントの音長が省略された場合の挙動の変更
- ループがベロシティの値をリセットしなくなった
- ループ回数に変数が使えなくなった
なお、プチコンバータは渡されたMMLとその変換結果を保持していて、すでに変換されたMML文字列に対してはキャッシュされた結果を返します。
長文になりましたがプチコンバータにまつわる事情はざっと以上になります。
同時に使われている? と思われるリズミカルおもちつきΣと、All over the MMLsのコードはまだ読めてません。