diff options
| author | inspectredc <inspectredc@gmail.com> | 2026-01-26 15:33:05 +0000 |
|---|---|---|
| committer | inspectredc <inspectredc@gmail.com> | 2026-01-26 15:33:05 +0000 |
| commit | 432d85ccb2a9269cd84efef565bee82d184fe91d (patch) | |
| tree | b0ff3fca660c875a0a50819a82262f68830b6e42 | |
| parent | 804d46a2df8d54885ce339f868cde6bdce0fff0a (diff) | |
Fix envelope extraction
| -rw-r--r-- | src/factories/fzerox/SequenceFactory.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
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<std::shared_ptr<IParsedData>> 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<SeqLabelInfo> posStack; @@ -1328,6 +1329,10 @@ std::optional<std::shared_ptr<IParsedData>> FZX::SequenceFactory::parse(std::vec forceLargeNotes = GetSafeNode<bool>(node, "force_large_notes"); } + if (node["envelope_end_markers"]) { + envelopeMarkedEnd = GetSafeNode<bool>(node, "envelope_end_markers"); + } + while (count < size || !posStack.empty()) { SeqCommand command; bool nextLabel = false; @@ -1997,8 +2002,14 @@ std::optional<std::shared_ptr<IParsedData>> 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; |
