This commit is contained in:
2026-01-23 10:37:48 +01:00
parent 1bb5ba0061
commit a88904ed0f
4 changed files with 192 additions and 118 deletions

View File

@@ -6,7 +6,7 @@ use std::time::Duration;
use super::LinkState;
use crate::config::{MAX_BANKS, MAX_PATTERNS};
use crate::model::{ExecutionTrace, Rng, ScriptEngine, SourceSpan, StepContext, Variables};
use crate::model::{ExecutionTrace, Rng, ScriptEngine, StepContext, Variables};
use crate::state::LiveKeyState;
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
@@ -87,13 +87,13 @@ pub struct ActivePatternState {
#[derive(Clone, Default)]
pub struct SharedSequencerState {
pub active_patterns: Vec<ActivePatternState>,
pub step_traces: HashMap<(usize, usize, usize), Vec<SourceSpan>>,
pub step_traces: HashMap<(usize, usize, usize), ExecutionTrace>,
pub event_count: usize,
}
pub struct SequencerSnapshot {
pub active_patterns: Vec<ActivePatternState>,
pub step_traces: HashMap<(usize, usize, usize), Vec<SourceSpan>>,
pub step_traces: HashMap<(usize, usize, usize), ExecutionTrace>,
pub event_count: usize,
}
@@ -118,7 +118,7 @@ impl SequencerSnapshot {
.map(|p| p.iter)
}
pub fn get_trace(&self, bank: usize, pattern: usize, step: usize) -> Option<&Vec<SourceSpan>> {
pub fn get_trace(&self, bank: usize, pattern: usize, step: usize) -> Option<&ExecutionTrace> {
self.step_traces.get(&(bank, pattern, step))
}
}
@@ -302,7 +302,7 @@ fn sequencer_loop(
let mut audio_state = AudioState::new();
let mut pattern_cache = PatternCache::new();
let mut runs_counter = RunsCounter::new();
let mut step_traces: HashMap<(usize, usize, usize), Vec<SourceSpan>> = HashMap::new();
let mut step_traces: HashMap<(usize, usize, usize), ExecutionTrace> = HashMap::new();
let mut event_count: usize = 0;
loop {
@@ -409,8 +409,8 @@ fn sequencer_loop(
script_engine.evaluate_with_trace(script, &ctx, &mut trace)
{
step_traces.insert(
(active.bank, active.pattern, step_idx),
std::mem::take(&mut trace.selected_spans),
(active.bank, active.pattern, source_idx),
std::mem::take(&mut trace),
);
for cmd in cmds {
match audio_tx.try_send(AudioCommand::Evaluate(cmd)) {