summaryrefslogtreecommitdiff
path: root/doc/Design_mml.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/Design_mml.md')
-rw-r--r--doc/Design_mml.md375
1 files changed, 0 insertions, 375 deletions
diff --git a/doc/Design_mml.md b/doc/Design_mml.md
deleted file mode 100644
index debb82d..0000000
--- a/doc/Design_mml.md
+++ /dev/null
@@ -1,375 +0,0 @@
----
-
-## 🎼 MML設計仕様書
-
-### 基本方針
-
-- **2つのモードを用意し、ツールのパラメータで切り替える**
-- モード間で書式を混合しない
-- 各モードはそれぞれ独立した仕様を持つ
-- どちらも出力する中間表現(NoteSequence)は共通
-
----
-
-## モード1: `ppmck` — PPMCKインスパイア独自形式
-
-PPMCKの文法をベースにしつつ、不要な複雑さを排除した独自サブセット。LLMが生成しやすく、FC音源の主要機能をカバーする。
-
-### 参考ドキュメント
-
-| 内容 | URL |
-|---|---|
-| PPMCK mckc.txt(MMLコンパイラ仕様書) | https://github.com/munshkr/ppmck/blob/master/doc/mckc.txt |
-| MCK Wiki MMLリファレンス | https://wikiwiki.jp/mck/MMLリファレンス |
-| NES APUハードウェア仕様 (midi2nes) | https://github.com/matiaszanolli/midi2nes/blob/master/docs/NES_APU_REFERENCE.md |
-| NES APU仕様 (problemkaputt.de ミラー) | https://github.com/RigleGit/nes-specs/blob/main/audioprocessingunitapu.md |
-
-### トラック構成
-
-```
-#TITLE "My Song"
-#COMPOSER "Luno"
-
-A t150 l8 o4 v15 q2 # Pulse1
- c d e f | g a b > c
-
-B l8 o3 v12 q1 # Pulse2
- c r g r c r g r
-
-T l4 o3 v7 # Triangle(音量は無視、固定振幅)
- c2 c2 g2 g2
-
-N l8 v10 # Noise
- r c r c r c r c
-
-L # 全体ループ(省略可)
-```
-
-### コマンド仕様
-
-#### トラックヘッダー
-
-| 記法 | 意味 | 対象 | 備考 |
-|---|---|---|---|
-| `A` | Pulse1 チャンネル | — | 矩形波 |
-| `B` | Pulse2 チャンネル | — | 矩形波 |
-| `T` | Triangle チャンネル | — | 三角波、音量固定 |
-| `N` | Noise チャンネル | — | ノイズ |
-| `L` | 全体ループ | トラック末尾 | 省略時は1回のみ再生 |
-
-#### 音高
-
-| 記法 | 意味 | 備考 |
-|---|---|---|
-| `c` `d` `e` `f` `g` `a` `b` | ド レ ミ ファ ソ ラ シ | 小文字 |
-| `c+` または `c#` | ド♯ | シャープ |
-| `c-` | ド♭ | フラット |
-| `o4` | オクターブ4(中央C基準) | `o0`〜`o7` |
-| `>` | 1オクターブ上へ | 相対移動 |
-| `<` | 1オクターブ下へ | 相対移動 |
-
-> Noiseチャンネルでは音高は使わない(周波数はノイズテーブルで固定)
-
-#### 音長
-
-| 記法 | 意味 | 備考 |
-|---|---|---|
-| `l4` | デフォルト音長 = 4分音符 | トラック内で随時変更可 |
-| `c4` | 4分音符のド | 音符の直後に数字 |
-| `c8` | 8分音符のド | |
-| `c1` | 全音符のド | |
-| `c4.` | 付点4分音符 | +半分の長さ |
-| `c4..` | 複付点4分音符 | +半分+半分の半分 |
-| `r4` | 4分休符 | 休符にも音長指定可 |
-| `c4&c4` | タイ | 同音高の音符を結合 |
-| `c4-` | 音長減算 | タイの逆、少し短く(第2段階) |
-
-音長とテンポの関係: `4分音符の秒数 = 60 / BPM`
-
-#### 音量
-
-| 記法 | 意味 | 対象 | 備考 |
-|---|---|---|---|
-| `v15` | 音量15(最大) | A, B, N | 0-15、FC準拠 |
-| `v0` | 音量0(無音) | A, B, N | |
-
-> Triangleチャンネルでは `v` は無視(ハードウェア仕様、音量制御なし)
-
-#### デューティ比
-
-| 記法 | 意味 | 対象 | 備考 |
-|---|---|---|---|
-| `q0` | 12.5% | A, B のみ | |
-| `q1` | 25% | A, B のみ | |
-| `q2` | 50% | A, B のみ | デフォルト |
-| `q3` | 75% | A, B のみ | |
-
-#### テンポ
-
-| 記法 | 意味 | 備考 |
-|---|---|---|
-| `t120` | BPM 120 | 最初のトラックで指定、全体に適用 |
-
-#### 区切り・フォーマット
-
-| 記法 | 意味 |
-|---|---|
-| `|` | 小節線(視覚用、再生には影響しない) |
-| 改行 | トラック内の区切り(視覚用) |
-| `#` 行 | ヘッダー・メタ情報 |
-| 空行 | 無視 |
-| `;` 以降 | コメント(行末まで無視) |
-
-#### 第2段階で追加予定
-
-| コマンド | 構文 | 内容 |
-|---|---|---|
-| カウント音長 | `c%48` | 全音符=192カウント基準 |
-| エンベロープ定義 | `@v0 = { 15, 12, 8, 0 }` | 音量エンベロープ |
-| エンベロープ指定 | `@v0` | 定義済みエンベロープ使用 |
-| デューティ比音色 | `@0 = { 0, 1, \| 2 }` | 発音中のデューティ比変化 |
-| スイープ | `s1,2` | ピッチスイープ(Pulseのみ) |
-| 区間ループ | `[ c d \| e f ]2` | 指定回数繰り返し |
-| トランスポーズ | `K2` | 全体キーシフト |
-| ノイズモード | `m0` / `m1` | Noise ch: 0=ロング周期, 1=ショート周期 |
-
----
-
-## モード2: `pyxel` — Pyxel MML準拠形式
-
-PyxelのMML仕様に準拠。Pyxelのサウンドシステムに合わせた記法。
-
-### 参考ドキュメント
-
-| 内容 | URL |
-|---|---|
-| Pyxel Audio API (DeepWiki) | https://deepwiki.com/kitao/pyxel/5.3-audio-api |
-| Pyxel MML Studio | https://kitao.github.io/pyxel/web/mml-studio/ |
-| Pyxel MMLコマンドリファレンス | https://kitao.github.io/pyxel/docs/mml-commands.md |
-| Pyxel GitHub(ソース) | https://github.com/kitao/pyxel |
-
-### トラック構成
-
-```
-0: T150 L8 O4 V15 # トラック0 (Pulse1)
- C D E F G A B >C
-
-1: L8 O3 V12 # トラック1 (Pulse2)
- C R G R C R G R
-
-2: L4 O3 V7 # トラック2 (Triangle)
- C2 C2 G2 G2
-
-3: L8 V10 # トラック3 (Noise)
- R C R C R C R C
-```
-
-### コマンド仕様
-
-#### トラックヘッダー
-
-| 記法 | 意味 | 備考 |
-|---|---|---|
-| `0:` `1:` `2:` `3:` | トラック番号 | 0-3の4トラック |
-| — | 0: Pulse1, 1: Pulse2, 2: Triangle, 3: Noise | Pyxelは4ch構成 |
-
-> PyxelはFCの5chからDPCMを省いた4ch。DPCMは非対応。
-
-#### 音高
-
-| 記法 | 意味 | 備考 |
-|---|---|---|
-| `C` `D` `E` `F` `G` `A` `B` | ド レ ミ ファ ソ ラ シ | **大文字** |
-| `C+` または `C#` | ド♯ | |
-| `C-` | ド♭ | |
-| `O4` | オクターブ4 | `O0`〜`O7` |
-| `>` | 1オクターブ上 | |
-| `<` | 1オクターブ下 | |
-
-#### 音長
-
-| 記法 | 意味 | 備考 |
-|---|---|---|
-| `L4` | デフォルト音長 = 4分音符 | |
-| `C4` | 4分音符のド | |
-| `C8` | 8分音符のド | |
-| `C4.` | 付点4分音符 | |
-| `R` | 休符 | 音長指定可 `R4` |
-| `&` | タイ | `C4&C4` |
-
-#### 音量
-
-| 記法 | 意味 | 備考 |
-|---|---|---|
-| `V15` | 音量15 | 0-15 |
-| `V0` | 無音 | |
-
-> Triangle(トラック2)ではPyxel仕様に従う。PyxelはTriangleにも音量を設定可能(FC実機とは異なる)
-
-#### テンポ
-
-| 記法 | 意味 | 備考 |
-|---|---|---|
-| `T150` | テンポ150 | BPM |
-
-#### デューティ比
-
-| 記法 | 意味 | 備考 |
-|---|---|---|
-| `Q0`〜`Q3` | デューティ比 | 0=12.5%, 1=25%, 2=50%, 3=75% |
-
-> Pyxelの公式仕様でデューティ比コマンドが存在するか要確認。Pyxelは波形タイプで指定する方式の可能性あり(`SQR`, `PLS`, `TRI`, `NOISE`)
-
-#### 第2段階で追加予定
-
-| コマンド | 内容 |
-|---|---|
-| ノイズ周期モード | `M0` / `M1`(要確認) |
-| エンベロープ | Pyxel仕様に準拠(要確認) |
-
----
-
-## 両モード比較サマリー
-
-| 項目 | ppmckモード | pyxelモード |
-|---|---|---|
-| **大文字/小文字** | 小文字 `c d e` | 大文字 `C D E` |
-| **チャンネル指定** | `A` `B` `T` `N`(文字) | `0:` `1:` `2:` `3:`(番号) |
-| **コマンドの大文字** | `o` `l` `v` `t` `q`(小文字) | `O` `L` `V` `T` `Q`(大文字) |
-| **チャンネル数** | 4ch(DPCMは第2段階) | 4ch(DPCM非対応) |
-| **Triangle音量** | 無視(FC仕様準拠) | 設定可(Pyxel仕様) |
-| **コメント** | `;` | 要確認 |
-| **ヘッダー** | `#TITLE` 等 | トラック番号のみ |
-| **ループ** | `L`(全体) | 要確認 |
-| **小節線** | `\|`(視覚用) | `\|`(視覚用) |
-
----
-
-これが公式の完全版ですね…! ありがとうございます。今まで断片的だったのが、これで全部揃いました。保存しておきますね。重要な訂正がいくつかありました。これまでの調査と比べて、全部整理します。
-
----
-
-## 📄 Pyxel MML 公式コマンド仕様(確定版)
-
-**出典:** https://kitao.github.io/pyxel/docs/mml-commands.md (全文提供いただきました)
-
----
-
-### 完全コマンド一覧
-
-#### テンポ・音長・音量
-
-| コマンド | 記法 | 意味 | 範囲 | デフォルト |
-|---|---|---|---|---|
-| テンポ | `T150` | BPM | 1- | 120 |
-| デフォルト音長 | `L4` | n分音符。`L12`で8分3連符 | 1-192 | 4 |
-| 音量 | `V100` | 音量 | **0-127** | 100 |
-| ゲートタイム | `Q80` | ノート実発音割合(%)。100=隙間なし、0=無音 | 0-100 | 80 |
-
-#### 音色・ピッチ
-
-| コマンド | 記法 | 意味 | 範囲 | デフォルト |
-|---|---|---|---|---|
-| 音色(トーン) | `@0` | 波形タイプ。0:Triangle / 1:Square / 2:Pulse / 3:Noise | 0-3 | 0 |
-| トランスポーズ | `K12` | 半音単位の移調。12で1オクターブ | — | 0 |
-| ディチューン | `Y100` | セント単位の微調整。100で半音上、-100で半音下 | — | 0 |
-
-#### 音高・オクターブ
-
-| コマンド | 記法 | 意味 | 範囲 | デフォルト |
-|---|---|---|---|---|
-| 音符 | `C D E F G A B` | ドレミファソラシ | — | — |
-| 音長指定 | `C4` `F16` | 音符の直後に音長 | 1-192 | `L`の値 |
-| シャープ | `#` または `+` | 半音上 | — | — |
-| フラット | `-` | 半音下 | — | — |
-| 付点 | `.` | 音長を1.5倍。複数可 `C4..` | — | — |
-| 休符 | `R` | 休符。`R8`のように音長指定可 | 1-192 | `L`の値 |
-| オクターブ | `O4` | オクターブ指定。`O4`のA=440Hz | -1〜9 | 4 |
-| 相対上 | `>` | 1オクターブ上(最大9) | — | — |
-| 相対下 | `<` | 1オクターブ下(最小-1) | — | — |
-| タイ/スラー | `&` | 同音高=タイ、異音高=レガート。**`C4&16` のように音長だけ指定も可** | — | — |
-
-#### リピート
-
-| コマンド | 記法 | 意味 | 範囲 |
-|---|---|---|---|
-| リピート開始 | `[` | 区間リピートの開始 | — |
-| リピート終了 | `]2` | 区間リピートの終了。回数指定。省略時は**無限リピート**。**ネスト対応** | 1- |
-
-> ⚠️ **重要な訂正:** これまでソースコード調査から `:...:` がリピート記法だと推測していましたが、公式ドキュメントでは **`[...]` が正しいリピート記法** でした。`RepeatStart` / `RepeatEnd` トークンは `[` と `]` に対応していたようです。ごめんなさい。
-
-#### エンベロープ `@ENV`
-
-| 記法 | 意味 |
-|---|---|
-| `@ENV0` | エンベロープOFF |
-| `@ENV1` | スロット1に切り替え |
-| `@ENV1 { 30, 20, 100, 50, 0 }` | スロット1を定義して切り替え |
-
-定義形式: `{ 初期音量, [継続tick, 目標音量]... }`
-- 1 tick = 4分音符の 1/48
-- スロット0は指定不可(OFF専用)
-
-#### ビブラート `@VIB`
-
-| 記法 | 意味 |
-|---|---|
-| `@VIB0` | ビブラートOFF |
-| `@VIB1` | スロット1に切り替え |
-| `@VIB1 { 24, 12, 100 }` | スロット1を定義して切り替え |
-
-定義形式: `{ ディレイtick, 周期tick, 深さcent }`
-- 1 tick = 4分音符の 1/48
-- スロット0は指定不可
-
-#### グライド(ピッチスライド)`@GLI`
-
-| 記法 | 意味 |
-|---|---|
-| `@GLI0` | グライドOFF |
-| `@GLI1` | スロット1に切り替え |
-| `@GLI1 { -100, 24 }` | スロット1を定義して切り替え |
-| `@GLI1 { *, * }` | `*`で前の音との差分を自動適用 |
-
-定義形式: `{ 初期ピッチオフセットcent, 0に戻るまでのtick }`
-- 1 tick = 4分音符の 1/48
-- スロット0は指定不可
-
----
-
-### これまでの調査からの主な訂正ポイント
-
-| 項目 | 修正前 | 修正後 |
-|---|---|---|
-| **リピート記法** | `:...:` | **`[...]`** (`[` 開始、`]` 終了、回数指定可、省略時無限、ネスト対応) |
-| **タイの音長指定** | `C4&C4` のみ | **`C4&16`** のように音長だけ指定可能 |
-| **`S` コマンド** | 「スピード」と推測 | **公式ドキュメントに存在しない**。code-exampleの `S` は別物だったか誤読 |
-| **`:` 記法** | リピート記法と推測 | **公式ドキュメントに記載なし**。ソースコードの別用途の可能性 |
-
----
-
-### ppmckモード vs pyxelモード — 最終比較(確定版)
-
-| 項目 | ppmckモード | pyxelモード |
-|---|---|---|
-| **大文字/小文字** | 小文字 `c d e` | 大文字 `C D E` |
-| **コマンド** | `o` `l` `v` `t` `q` | `O` `L` `V` `T` `Q` `@` `K` `Y` |
-| **チャンネル指定** | `A` `B` `T` `N`(トラック文字) | `@0`〜`@3`(音色=チャンネル) |
-| **チャンネル数** | 4ch(DPCM第2段階) | 4ch(DPCM非対応) |
-| **音量範囲** | 0-15(FC準拠) | 0-127 |
-| **音量デフォルト** | — | 100 |
-| **デューティ比** | `q0`〜`q3` で4種指定 | `@1`(50%), `@2`(25%) の2種のみ |
-| **ゲートタイム** | 第2段階で検討 | `Q0`〜`Q100`(デフォルト80) |
-| **Triangle音量** | 無視(FC仕様) | 設定可(Pyxel仕様) |
-| **エンベロープ** | `@v`(第2段階) | `@ENV` スロット定義+切り替え |
-| **ビブラート** | `MP`(第3段階) | `@VIB` スロット定義+切り替え |
-| **ピッチスライド** | `s` スイープ(第2段階) | `@GLI` スロット定義+切り替え |
-| **トランスポーズ** | `K`(第2段階) | `K`(半音単位) |
-| **ディチューン** | `D`(第3段階) | `Y`(セント単位) |
-| **リピート** | `L`(全体), `[...]`(第2段階) | `[...]`(回数指定、省略時無限、ネスト対応) |
-| **タイの音長指定** | `c4&c4` のみ | `C4&C4` または `C4&16`(音長のみ可) |
-| **tick単位** | なし | 1 tick = 4分音符の1/48 |
-| **コメント** | `;` | 公式記載なし |
-| **ヘッダー** | `#TITLE` 等 | なし |
-
----