Skip to content

Repository files navigation

mucc-next

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

About

An improved compiler for Aquaplus P/ECE standard music sequence driver

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages