diff options
| author | tanaka takashi <isazaka@gmail.com> | 2026-07-12 17:58:19 +0900 |
|---|---|---|
| committer | tanaka takashi <isazaka@gmail.com> | 2026-07-12 17:59:16 +0900 |
| commit | bf36a773918959eeb6ffe7dae2fb8b0874438eb4 (patch) | |
| tree | da7ff0037ea923fea255d2ed69ed2fb51395d9b9 /src/mml_composemusic_mcp/server.py | |
| parent | f1cd4d7d16f6e75a50bb0c587c0f759f7cf710cd (diff) | |
feat(ppmck): mckc準拠の構文拡張とIR保持コマンド追加
- @をデューティ比、qをクオンタイズに修正(mckc原本準拠)
- ^タイ、Dディチューン、sスイープ、v+/v-相対音量を追加
- @v/@@/@MP/@EP/@EN エンベロープ・LFO系を構文解析してIR保持
- 上記IR保持コマンドは合成未対応を SEMANTIC_UNSUPPORTED_FEATURE で警告
- Design.md / MML_BNF.md を更新
- 全200テスト + ruff チェック通過
Diffstat (limited to 'src/mml_composemusic_mcp/server.py')
| -rw-r--r-- | src/mml_composemusic_mcp/server.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mml_composemusic_mcp/server.py b/src/mml_composemusic_mcp/server.py index de0ea82..9e9ac67 100644 --- a/src/mml_composemusic_mcp/server.py +++ b/src/mml_composemusic_mcp/server.py @@ -228,15 +228,24 @@ def compose_mml( def _dict_to_note_sequence(data: dict) -> NoteSequence: from .ir import ( ChannelSequence, + DetuneEvent, + DutyEnvelopeEvent, DutyEvent, EnvelopeEvent, GlideEvent, + LfoEvent, + NoteEnvEvent, NoteEvent, NoteSequence, + PitchEnvEvent, + QuantizeEvent, + RelativeVolumeEvent, RepeatEvent, RestEvent, + SweepEvent, TempoEvent, VibratoEvent, + VolumeEnvelopeEvent, VolumeEvent, ) @@ -268,6 +277,24 @@ def _dict_to_note_sequence(data: dict) -> NoteSequence: ch.events.append(RepeatEvent(**ev)) elif ev_type == "envelope": ch.events.append(EnvelopeEvent(**ev)) + elif ev_type == "quantize": + ch.events.append(QuantizeEvent(**ev)) + elif ev_type == "detune": + ch.events.append(DetuneEvent(**ev)) + elif ev_type == "sweep": + ch.events.append(SweepEvent(**ev)) + elif ev_type == "rel_volume": + ch.events.append(RelativeVolumeEvent(**ev)) + elif ev_type == "vol_envelope": + ch.events.append(VolumeEnvelopeEvent(**ev)) + elif ev_type == "duty_envelope": + ch.events.append(DutyEnvelopeEvent(**ev)) + elif ev_type == "lfo": + ch.events.append(LfoEvent(**ev)) + elif ev_type == "pitch_envelope": + ch.events.append(PitchEnvEvent(**ev)) + elif ev_type == "note_envelope": + ch.events.append(NoteEnvEvent(**ev)) elif ev_type == "vibrato": ch.events.append(VibratoEvent(**ev)) elif ev_type == "glide": |
