From 432d85ccb2a9269cd84efef565bee82d184fe91d Mon Sep 17 00:00:00 2001 From: inspectredc Date: Mon, 26 Jan 2026 15:33:05 +0000 Subject: Fix envelope extraction --- src/factories/fzerox/SequenceFactory.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/factories/fzerox/SequenceFactory.cpp b/src/factories/fzerox/SequenceFactory.cpp index bacdfe0..8b80d8a 100644 --- a/src/factories/fzerox/SequenceFactory.cpp +++ b/src/factories/fzerox/SequenceFactory.cpp @@ -1310,6 +1310,7 @@ std::optional> FZX::SequenceFactory::parse(std::vec bool largeNotes = false; bool scanPastJump = false; bool forceLargeNotes = false; + bool envelopeMarkedEnd = false; int32_t channel = -1; int32_t layer = -1; std::deque posStack; @@ -1328,6 +1329,10 @@ std::optional> FZX::SequenceFactory::parse(std::vec forceLargeNotes = GetSafeNode(node, "force_large_notes"); } + if (node["envelope_end_markers"]) { + envelopeMarkedEnd = GetSafeNode(node, "envelope_end_markers"); + } + while (count < size || !posStack.empty()) { SeqCommand command; bool nextLabel = false; @@ -1997,8 +2002,14 @@ std::optional> FZX::SequenceFactory::parse(std::vec command.args.emplace_back(arg); existingPositions.insert(addr); addr += 2 * sizeof(int16_t); - if (arg == 0) { - break; + if (envelopeMarkedEnd) { + if (delay == 0xFFFF) { + break; + } + } else { + if (arg == 0) { + break; + } } } command.size = addr - envAddr; -- cgit v1.2.3