diff --git a/CHANGELOG.md b/CHANGELOG.md index aece68b..6cf9795 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ All notable changes to this project will be documented in this file. ### Changed +- Renamed `tri` Forth word to `triangle`. - Sequencer rewritten with prospective lookahead scheduling. Instead of sleeping until a substep, waking late, and detecting past events, the sequencer now pre-computes all events within a ~20ms forward window. Events arrive at doux with positive time deltas, scheduled before they need to fire. Sleep+spin-wait replaced by `recv_timeout(3ms)` on the command channel. Timing no longer depends on OS sleep precision. - `audio_sample_pos` updated at buffer start instead of end, so `engine_time` reflects current playback position. - Doux grace period increased from 1ms to 50ms as a safety net (events should never be late with lookahead). diff --git a/crates/forth/src/ops.rs b/crates/forth/src/ops.rs index 47cdba3..ef15b0c 100644 --- a/crates/forth/src/ops.rs +++ b/crates/forth/src/ops.rs @@ -80,7 +80,7 @@ pub enum Op { Ad, Apply, Ramp, - Tri, + Triangle, Range, Perlin, Chain, diff --git a/crates/forth/src/vm.rs b/crates/forth/src/vm.rs index cc66df3..57ae1c8 100644 --- a/crates/forth/src/vm.rs +++ b/crates/forth/src/vm.rs @@ -852,7 +852,7 @@ impl Forth { let val = phase.powf(curve); stack.push(Value::Float(val, None)); } - Op::Tri => { + Op::Triangle => { let freq = stack.pop().ok_or("stack underflow")?.as_float()?; let phase = (freq * ctx.beat).fract(); let phase = if phase < 0.0 { phase + 1.0 } else { phase }; diff --git a/crates/forth/src/words.rs b/crates/forth/src/words.rs index 7e29158..3739220 100644 --- a/crates/forth/src/words.rs +++ b/crates/forth/src/words.rs @@ -1198,12 +1198,12 @@ pub const WORDS: &[Word] = &[ varargs: false, }, Word { - name: "tri", + name: "triangle", aliases: &[], category: "LFO", stack: "(freq -- val)", desc: "Triangle wave [0,1]: 0→1→0", - example: "0.5 tri", + example: "0.5 triangle", compile: Simple, varargs: false, }, @@ -2879,7 +2879,7 @@ pub(super) fn simple_op(name: &str) -> Option { "ad" => Op::Ad, "apply" => Op::Apply, "ramp" => Op::Ramp, - "tri" => Op::Tri, + "triangle" => Op::Triangle, "range" => Op::Range, "perlin" => Op::Perlin, "chain" => Op::Chain,