flesh out sequencer

This commit is contained in:
2026-01-20 14:37:03 +01:00
parent 276107433a
commit ebb82b6f7d
25 changed files with 2069 additions and 771 deletions

View File

@@ -6,6 +6,7 @@ pub struct Event {
// Timing
pub time: Option<f64>,
pub delta: Option<f64>,
pub repeat: Option<f32>,
pub duration: Option<f32>,
pub gate: Option<f32>,
@@ -172,6 +173,7 @@ impl Event {
match key {
"doux" | "dirt" => event.cmd = Some(val.to_string()),
"time" | "t" => event.time = val.parse().ok(),
"delta" => event.delta = val.parse().ok(),
"repeat" | "rep" => event.repeat = val.parse().ok(),
"duration" | "dur" | "d" => event.duration = val.parse().ok(),
"gate" => event.gate = val.parse().ok(),

View File

@@ -263,7 +263,11 @@ impl Engine {
}
}
fn play_event(&mut self, event: Event) -> Option<usize> {
fn play_event(&mut self, mut event: Event) -> Option<usize> {
if let Some(delta) = event.delta {
event.time = Some(self.time + delta);
event.delta = None;
}
if event.time.is_some() {
// ALL events with time go to schedule (like dough.c)
// This ensures repeat works correctly for time=0 events