P/ECE 標準音源ドライバのミュージックデータコンバータ、mucc を改良したものです。
- パートをまとめ書きした際に二つ目以降のパートをコールする構造をやめ、各パートがそのコンテキストでコンパイルされるようにした
- まとめ書きの多い MML ではファイルサイズが大きくなるかも
- まとめ書きはないが行数の多い MML では mucc より小さくなるかも
- データはあるが音符や休符のない (= 0tick) パートを出力しないようにした
- そのようなパートにループやリピートがあると muslib が無限ループする
- これで困るのは
tぐらいだろう
- 構文エラー検出と表示の強化
- 検知して表示はするがエラーとして中止するのはまだ
- パート拡張対応
- 32 パートまで。MML のパート表記は A...Z までなので書ききれない
- 未使用のパートは出力データに含まれないようにする。結果 MML 上の
'A' + nパートが出力データの n 番目のパートに対応するとは限らなくなった。 - 互換性のためデータが 6 パートに満たない場合はカラのパートを追加する。
- 拙作 auPiECE.kpi の extended-channels ブランチ, 同 pceplayer.js, 同 fpkplay で再生できます。
lコマンドに付点.を書けるようにした- 拡張パート表記
?- それまでに言及したことのあるすべてのパートに対応する
ABC ...
HIJ ...
? L ; ABCHIJ に対応する。ABCDEFGHIJ ではない
ABC ...
HIJ ...
- 拡張コマンド
S- それを書いたパートのその時点のクロックやオクターブ等を表示する
- 拡張コマンド
W- 相対エクスプレッションコマンド
(/)の値を指定しなかったときのデフォルトを指定する - 初期値は mucc との互換性のため 1
- FM 音源や PSG/SSG 音源ドライバからの移植が楽になる
- 相対エクスプレッションコマンド
- 音長拡張表記
^- 音符の長さをつなげて書けるようにする
- いままで
a2&a4&a16とか書いていたのがa2^4^16で済む - 他ドライバからの移植が楽になる
- コンパイル完了時に各パートの総クロックとループポイントまでのクロックを表示する
- パートの同期ずれのデバッグに威力を発揮する
上記の拡張コマンドや表記は演奏データとしては書き出されないので、演奏データはパート拡張部分を除けば既存の muslib に完全互換です。
- アセンブラ様表記のコンパイル(P/ECE開発環境添付の
jsbad.sなど) - 出力データはバイナリファイルのみ、Cソースやアセンブラ形式出力はなし
音符なしでいきなり現れる数字- 直近の音符をその数字で鳴らす、という意味らしい
- PMDで使っているので復活させた
a1&1&1&1のように使う。a1^1^1^1と比べて最大長制限がない
- パート中の
iコマンド- 文中マクロ定義?
Visual Studio 2022 の C++ と MSYS2 gcc 13.1 で確認しています。 CMake でビルドしてください。
MIT