https://github.com/autch/mucc-next
An improved compiler for Aquaplus P/ECE standard music sequence driver
https://github.com/autch/mucc-next
c-plus-plus piece piece-me pmd
Last synced: 3 months ago
JSON representation
An improved compiler for Aquaplus P/ECE standard music sequence driver
- Host: GitHub
- URL: https://github.com/autch/mucc-next
- Owner: autch
- Created: 2025-10-03T10:15:31.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2025-10-03T13:25:27.000Z (3 months ago)
- Last Synced: 2025-10-03T15:29:05.114Z (3 months ago)
- Topics: c-plus-plus, piece, piece-me, pmd
- Language: C++
- Homepage:
- Size: 12.7 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
mucc-next
=========
P/ECE 標準音源ドライバのミュージックデータコンバータ、mucc を改良したものです。
## 改良点
- パートをまとめ書きした際に二つ目以降のパートをコールする構造をやめ、各パートがそのコンテキストでコンパイルされるようにした
- まとめ書きの多い MML ではファイルサイズが大きくなるかも
- まとめ書きはないが行数の多い MML では mucc より小さくなるかも
- データはあるが音符や休符のない (= 0tick) パートを出力しないようにした
- そのようなパートにループやリピートがあると muslib が無限ループする
- これで困るのは `t` ぐらいだろう
- 構文エラー検出と表示の強化
- 検知して表示はするがエラーとして中止するのはまだ
- パート拡張対応
- 32 パートまで。MML のパート表記は A...Z までなので書ききれない
- 未使用のパートは出力データに含まれないようにする。結果 MML 上の `'A' + n` パートが出力データの n 番目のパートに対応するとは限らなくなった。
- 互換性のためデータが 6 パートに満たない場合はカラのパートを追加する。
- 拙作 [auPiECE.kpi の extended-channels ブランチ](https://github.com/autch/auPiECE.kpi/tree/extended-channels), 同 [pceplayer.js](https://github.com/autch/pceplayer.js/tree/modernize-2024), 同 [fpkplay](https://github.com/autch/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ソースやアセンブラ形式出力はなし
- 音符なしでいきなり現れる数字
- 直近の音符をその数字で鳴らす、という意味らしい
- パート中の `i` コマンド
- 文中マクロ定義?
## コンパイル
Visual Studio 2022 の C++ と MSYS2 gcc 13.1 で確認しています。
CMake でビルドしてください。
## ライセンス
MIT