Feat: tri is now triangle (disambiguation)

This commit is contained in:
2026-02-04 20:34:37 +01:00
parent a943d9622e
commit 8d249cf89b
4 changed files with 6 additions and 5 deletions

View File

@@ -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).

View File

@@ -80,7 +80,7 @@ pub enum Op {
Ad,
Apply,
Ramp,
Tri,
Triangle,
Range,
Perlin,
Chain,

View File

@@ -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 };

View File

@@ -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<Op> {
"ad" => Op::Ad,
"apply" => Op::Apply,
"ramp" => Op::Ramp,
"tri" => Op::Tri,
"triangle" => Op::Triangle,
"range" => Op::Range,
"perlin" => Op::Perlin,
"chain" => Op::Chain,