summaryrefslogtreecommitdiff
path: root/tests/test_parser_detailed.py
diff options
context:
space:
mode:
authortanaka takashi <isazaka@gmail.com>2026-07-12 18:28:50 +0900
committertanaka takashi <isazaka@gmail.com>2026-07-12 18:28:50 +0900
commit3d06bee12a26bc55cd73b1494e4d008a8098f6f5 (patch)
treedd13a8f3fcd9d6dbf74d6406bfaa8894895af0ce /tests/test_parser_detailed.py
parentbf36a773918959eeb6ffe7dae2fb8b0874438eb4 (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 'tests/test_parser_detailed.py')
-rw-r--r--tests/test_parser_detailed.py39
1 files changed, 23 insertions, 16 deletions
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():