diff options
| author | tanaka takashi <isazaka@gmail.com> | 2026-07-12 18:28:50 +0900 |
|---|---|---|
| committer | tanaka takashi <isazaka@gmail.com> | 2026-07-12 18:28:50 +0900 |
| commit | 3d06bee12a26bc55cd73b1494e4d008a8098f6f5 (patch) | |
| tree | dd13a8f3fcd9d6dbf74d6406bfaa8894895af0ce /src/mml_composemusic_mcp/parser_ppmck.py | |
| parent | bf36a773918959eeb6ffe7dae2fb8b0874438eb4 (diff) | |
feat: MML拡張合成とNTSC 2A03準拠のIR v2音源を実装
- エンベロープ、LFO、ビブラート、グライドのグローバル定義表を追加
- ppmckおよびPyxelの拡張コマンドを音声合成へ反映
- 2A03のPulseデューティ列、Triangle DAC、Noise LFSR、Sweepを実装
- APUタイマーに基づく周波数量子化と非線形ミキサを追加
- 途中テンポ変更、拡張コマンドの検証、トラック外定義に対応
- APU規格、拡張合成、IR v2のテストを追加
- プロジェクト独自のppmck拡張仕様と対応範囲を文書化
Diffstat (limited to 'src/mml_composemusic_mcp/parser_ppmck.py')
| -rw-r--r-- | src/mml_composemusic_mcp/parser_ppmck.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/mml_composemusic_mcp/parser_ppmck.py b/src/mml_composemusic_mcp/parser_ppmck.py index 47a0412..bd3b06b 100644 --- a/src/mml_composemusic_mcp/parser_ppmck.py +++ b/src/mml_composemusic_mcp/parser_ppmck.py @@ -97,6 +97,36 @@ class PpmckParser: if token.type == TokenType.INVALID: self._handle_invalid(token) continue + if token.type in { + TokenType.VOL_ENV, + TokenType.DUTY, + TokenType.LFO_DEF, + TokenType.PITCH_ENV_DEF, + TokenType.NOTE_ENV_DEF, + }: + statement = self._parse_statement() + if isinstance( + statement, + ( + VolumeEnvelopeDefStmt, + DutyEnvelopeDefStmt, + LfoDefStmt, + PitchEnvDefStmt, + NoteEnvDefStmt, + ), + ): + program.global_statements.append(statement) + else: + self.ctx.add_error( + code=ErrorCode.SEMANTIC_OUTSIDE_TRACK, + line=token.line, + column=token.column, + message="トラック外ではエフェクト定義だけを使用できます。", + severity="error", + hint="選択コマンドはトラック内へ移動してください。", + context=context_line(self.source, token), + ) + continue # Anything else before a track header is outside a track. self._warn_outside_track(token) self.ctx.advance() |
