From bf36a773918959eeb6ffe7dae2fb8b0874438eb4 Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Sun, 12 Jul 2026 17:58:19 +0900 Subject: feat(ppmck): mckc準拠の構文拡張とIR保持コマンド追加 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - @をデューティ比、qをクオンタイズに修正(mckc原本準拠) - ^タイ、Dディチューン、sスイープ、v+/v-相対音量を追加 - @v/@@/@MP/@EP/@EN エンベロープ・LFO系を構文解析してIR保持 - 上記IR保持コマンドは合成未対応を SEMANTIC_UNSUPPORTED_FEATURE で警告 - Design.md / MML_BNF.md を更新 - 全200テスト + ruff チェック通過 --- doc/MML_BNF.md | 113 +++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 85 insertions(+), 28 deletions(-) (limited to 'doc/MML_BNF.md') diff --git a/doc/MML_BNF.md b/doc/MML_BNF.md index 599fd24..83a1281 100644 --- a/doc/MML_BNF.md +++ b/doc/MML_BNF.md @@ -71,8 +71,11 @@ | | | + | | | + | + | | | | @@ -88,45 +91,86 @@ ::= "l" /* l1 〜 l192 */ ::= "v" /* v0 〜 v15 */ - ::= "q" /* q0 〜 q3, Pulse系のみ */ + + ::= "@" /* @0 〜 @3, Pulse系のみ */ + ::= "q" /* q1 〜 q8 */ ::= "t" /* t1 〜 */ - ::= ( | | ) + ::= "^" ( | ) + ::= "&" ( | | ) ::= ";" ``` -### 2.3 将来予定コマンド(現在の受理文法には含めない) +### 2.3 拡張コマンド(第1段階: IR 保持のみ、合成無視) + +```bnf + ::= + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + + + ::= "v+" ? /* 1 〜 15 */ + | "v-" ? /* 1 〜 15 */ + + ::= "D" /* -127 〜 126 */ + ::= "s" "," + +::= "@v" "=" "{" "|" ? "}" +::= "@v" + +::= "@" "=" "{" "|" ? "}" +::= "@@" + + ::= "@MP" "=" "{" "," "," "," "}" + ::= "MP" + ::= "MPOF" + + ::= "@EP" "=" "{" "|" ? "}" + ::= "EP" + ::= "EPOF" + + ::= "@EN" "=" "{" "|" ? "}" + ::= "EN" + ::= "ENOF" + + ::= ("+" | "-")? + ::= (","? )* + ::= (","? )* +``` + +### 2.4 将来予定コマンド(現在の受理文法には含めない) 以下は設計予約であり、現在は構文エラーになる。実装時に受理文法へ移す。 ```bnf ::= - | - | - | - | | | | ::= ? "%" - ::= "@v" "=" "{" "|" ? "}" - ::= "@v" - -::= "@" "=" "{" "|" ? "}" - - ::= "s" "," - ::= "[" + "]" ? ::= "K" ::= "m" - - ::= (","? )* ``` + --- ## 3. pyxel モード @@ -211,16 +255,27 @@ ## 5. 値範囲 -| コマンド | 有効範囲 | デフォルト | -|---|---|---| -| `o` / `O` | 0 〜 7 | 4 | -| `l` / `L` | 1 〜 192 | 4 | -| `v` (ppmck) | 0 〜 15 | 15 | -| `V` (pyxel) | 0 〜 127 | 100 | -| `q` (ppmck) | 0 〜 3 | 2 | -| `@` (pyxel) | 0 〜 3 | — | -| `Q` (pyxel) | 0 〜 100 | 80 | -| `t` / `T` | 1 〜 | 120 | +| コマンド | モード | 有効範囲 | デフォルト | 備考 | +|---|---|---|---|---| +| `o` / `O` | 両方 | 0 〜 7 | 4 | | +| `l` / `L` | 両方 | 1 〜 192 | 4 | | +| `v` | ppmck | 0 〜 15 | 15 | | +| `V` | pyxel | 0 〜 127 | 100 | | +| `v+` / `v-` | ppmck | 1 〜 15 | 1 | 相対音量(IR保持のみ) | +| `@` | ppmck | 0 〜 3 | 2 | デューティ比(Pulse系のみ) | +| `@` | pyxel | 0 〜 3 | — | デューティ比(Pulse系のみ) | +| `q` | ppmck | 1 〜 8 | 8 | クオンタイズ(gate_time = value / 8) | +| `Q` | pyxel | 0 〜 100 | 80 | ゲートタイム(%) | +| `t` / `T` | 両方 | 1 〜 | 120 | | +| `D` | ppmck | -127 〜 126 | 0 | ディチューン(IR保持のみ) | +| `s` | ppmck | 0 〜 15, 0 〜 7 | — | スイープ `s,`(IR保持のみ) | +| `@v` | ppmck | 0 〜 255 | — | 音量エンベロープ(IR保持のみ) | +| `@@` | ppmck | 0 〜 255 | — | デューティエンベロープ(IR保持のみ) | +| `@MP` / `MP` / `MPOF` | ppmck | 0 〜 255 | — | LFO(IR保持のみ) | +| `@EP` / `EP` / `EPOF` | ppmck | 0 〜 255 | — | ピッチエンベロープ(IR保持のみ) | +| `@EN` / `EN` / `ENOF` | ppmck | 0 〜 255 | — | ノートエンベロープ(IR保持のみ) | +| `K` | pyxel | -127 〜 127 | 0 | トランスポーズ(半音) | +| `Y` | pyxel | -127 〜 127 | 0 | ディチューン(セント) | --- @@ -228,6 +283,8 @@ - 本 BNF は `mml-composemusic-mcp` の**サポート範囲**を定義するものであり、オリジナルの PPMCK や Pyxel の全機能を網羅するものではない。 - 第2段階予定コマンドは設計予約として記載するが、現在の受理文法には含めない。 -- `@ENV` / `@VIB` / `@GLI` は構文解析してIRへ保持し、合成未対応を `SEMANTIC_UNSUPPORTED_FEATURE` で警告する。 -- コマンド文字は ppmck では小文字、pyxel では大文字を使用する。音符・休符も同じ規則に従う。 +- ppmck モードの `@v` / `@@` / `@MP` / `@EP` / `@EN`、および `D` / `s` / `v+` / `v-` は構文解析して IR へ保持し、合成には反映しない。未対応を `SEMANTIC_UNSUPPORTED_FEATURE` で警告する。 +- pyxel モードの `@ENV` / `@VIB` / `@GLI` も同様に IR 保持のみで、`SEMANTIC_UNSUPPORTED_FEATURE` 警告を返す。 +- コマンド文字は ppmck では小文字、pyxel では大文字を使用する。音符・休符も同じ規則に従う。ただし ppmck の `D`(ディチューン)は大文字のみ受理する(小文字 `d` は音符)。 +- `^` は ppmck モード専用のタイ、`&` は両モード共通のスラー(slur)として扱う。 - 詳細な実装アーキテクチャは [Design.md](Design.md) を参照。 -- cgit v1.2.3