From 3d06bee12a26bc55cd73b1494e4d008a8098f6f5 Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Sun, 12 Jul 2026 18:28:50 +0900 Subject: feat: MML拡張合成とNTSC 2A03準拠のIR v2音源を実装 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - エンベロープ、LFO、ビブラート、グライドのグローバル定義表を追加 - ppmckおよびPyxelの拡張コマンドを音声合成へ反映 - 2A03のPulseデューティ列、Triangle DAC、Noise LFSR、Sweepを実装 - APUタイマーに基づく周波数量子化と非線形ミキサを追加 - 途中テンポ変更、拡張コマンドの検証、トラック外定義に対応 - APU規格、拡張合成、IR v2のテストを追加 - プロジェクト独自のppmck拡張仕様と対応範囲を文書化 --- tests/test_parser_detailed.py | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) (limited to 'tests/test_parser_detailed.py') diff --git a/tests/test_parser_detailed.py b/tests/test_parser_detailed.py index f1f4b6a..5026058 100644 --- a/tests/test_parser_detailed.py +++ b/tests/test_parser_detailed.py @@ -77,46 +77,53 @@ def test_ppmck_tie_cmd(): assert notes[0].duration == 384 -def test_ppmck_detune_warning(): +def test_ppmck_detune_supported(): source = "A t120 l4 o4 D10\n c" ns, errors = _analyze_ppmck(source) - assert any(e.code == ErrorCode.SEMANTIC_UNSUPPORTED_FEATURE for e in errors) + assert not errors + assert ( + next( + e for e in ns.channels["Pulse1"].events if isinstance(e, NoteEvent) + ).detune_cents + == 10 + ) -def test_ppmck_sweep_warning(): +def test_ppmck_sweep_supported(): source = "A t120 l4 o4 s1,2\n c" ns, errors = _analyze_ppmck(source) - assert any(e.code == ErrorCode.SEMANTIC_UNSUPPORTED_FEATURE for e in errors) + assert not errors -def test_ppmck_rel_vol_warning(): +def test_ppmck_rel_vol_supported(): source = "A t120 l4 o4 v+5\n c" ns, errors = _analyze_ppmck(source) - assert any(e.code == ErrorCode.SEMANTIC_UNSUPPORTED_FEATURE for e in errors) + assert not errors -def test_ppmck_vol_env_use_warning(): - source = "A t120 l4 o4 @v0\n c" +def test_ppmck_vol_env_use_supported(): + source = "A t120 l4 o4 @v0={15|10} @v0\n c" ns, errors = _analyze_ppmck(source) - assert any(e.code == ErrorCode.SEMANTIC_UNSUPPORTED_FEATURE for e in errors) + assert not errors -def test_ppmck_vol_env_def_warning(): +def test_ppmck_vol_env_def_supported(): source = "A t120 l4 o4\n@v0 = { 15, 10, | 5 }\n c" ns, errors = _analyze_ppmck(source) - assert any(e.code == ErrorCode.SEMANTIC_UNSUPPORTED_FEATURE for e in errors) + assert not errors + assert ns.definitions["volume_envelopes"][0]["points"] == [15, 10] -def test_ppmck_lfo_def_warning(): +def test_ppmck_lfo_def_supported(): source = "A t120 l4 o4\n@MP0 = { 0, 10, 5, 0 }\n c" ns, errors = _analyze_ppmck(source) - assert any(e.code == ErrorCode.SEMANTIC_UNSUPPORTED_FEATURE for e in errors) + assert not errors -def test_ppmck_duty_env_use_warning(): - source = "A t120 l4 o4 @@0\n c" +def test_ppmck_duty_env_use_supported(): + source = "A t120 l4 o4 @0={0|1} @@0\n c" ns, errors = _analyze_ppmck(source) - assert any(e.code == ErrorCode.SEMANTIC_UNSUPPORTED_FEATURE for e in errors) + assert not errors def test_ppmck_duty_triangle_error(): -- cgit v1.2.3