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- それを書いたパートのその時点のクロックやオクターブ等を表示する
line 10: PART A TICK 24 TR_ATTR 0 OCT 4+0 LEN 24+0 VOL 120+0 EXP 0 DETUNE 0+0 XPOSE 0 REP_NEST 0
-
順番に、
-
line行番号 -
PARTパート名 -
TICKそのパートの現在クロック -
TR_ATTRトラック属性、1のときドラムパート -
OCTオクターブ、n+mで n がonの値、m がo+mの値 -
LEN音長、表記はn+mで n がlnの値、m がl+mの値 -
VOL音量、表記はn+mで n がVnの値、m がV+mの値 -
EXPエクスプレッション -
DETUNEデチューン、表記はn+mで n がDnの値、m がD+mの値 -
XPOSEトランスポーズ -
REP_NESTリピートネストの深さ
-
-
拡張コマンド
Wn- 相対エクスプレッションコマンド
(/)の値を指定しなかったときのデフォルトを$n$ に指定する - 初期値は mucc との互換性のため 1
- FM 音源や PSG/SSG 音源ドライバからの移植が楽になる
-
W*mと書くと(n/)nと書いたときの変位が$n \times m$ になる。Wnと併用可能。
- 相対エクスプレッションコマンド
-
音長拡張表記
^- 音符の長さをつなげて書けるようにする
- いままで
a2&a4&a16とか書いていたのがa2^4^16で済む - つないだ結果クロックの上限 255 を超えるとオーバーフローする。このような時は後述の
a2&1&1&1&1の記法を使う。 - 他ドライバからの移植が楽になる
-
コンパイル完了時に各パートの総クロックとループポイントまでのクロックを表示する
- パートの同期ずれのデバッグに威力を発揮する
上記の拡張コマンドや表記は演奏データとしては書き出されないので、演奏データはパート拡張部分を除けば既存の 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