diff options
Diffstat (limited to 'src/audio/tracker.cc')
| -rw-r--r-- | src/audio/tracker.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/audio/tracker.cc b/src/audio/tracker.cc index d887208..67c197f 100644 --- a/src/audio/tracker.cc +++ b/src/audio/tracker.cc @@ -3,6 +3,7 @@ #include "audio/synth.h" #include "util/asset_manager.h" #include "util/debug.h" +#include "util/fatal_error.h" #include <cstring> #include <vector> @@ -140,6 +141,21 @@ void tracker_init() { g_tracker_samples_count); #endif /* defined(DEBUG_LOG_TRACKER) */ } + + // Validate that all pattern events are sorted by unit_time + // (required for early-exit optimization in tracker_update) + FATAL_CODE_BEGIN + for (uint32_t pid = 0; pid < g_tracker_patterns_count; ++pid) { + const TrackerPattern& pattern = g_tracker_patterns[pid]; + for (uint32_t i = 1; i < pattern.num_events; ++i) { + FATAL_CHECK(pattern.events[i].unit_time < pattern.events[i - 1].unit_time, + "Pattern %d has unsorted events: event[%d].time=%.3f < " + "event[%d].time=%.3f\n", + pid, i, pattern.events[i].unit_time, i - 1, + pattern.events[i - 1].unit_time); + } + } + FATAL_CODE_END } void tracker_reset() { |
