An open API service indexing awesome lists of open source software.

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

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