diff --git a/crates/forth/src/vm.rs b/crates/forth/src/vm.rs index 02ceaed..9ecf82f 100644 --- a/crates/forth/src/vm.rs +++ b/crates/forth/src/vm.rs @@ -1433,7 +1433,7 @@ impl Forth { let dur = pop_float(stack)? * ctx.step_duration(); let end = pop_float(stack)?; let start = pop_float(stack)?; - let suffix = match curve { 1 => "e", 2 => "s", _ => "" }; + let suffix = match curve { 1 => "e", 2 => "s", 3 => "i", 4 => "o", 5 => "p", _ => "" }; let s = format!("{start}>{end}:{dur}{suffix}"); stack.push(Value::Str(s.into(), None)); } diff --git a/crates/forth/src/words/compile.rs b/crates/forth/src/words/compile.rs index 7a49c08..c1e1249 100644 --- a/crates/forth/src/words/compile.rs +++ b/crates/forth/src/words/compile.rs @@ -136,6 +136,9 @@ pub(super) fn simple_op(name: &str) -> Option { "slide" => Op::ModSlide(0), "expslide" => Op::ModSlide(1), "sslide" => Op::ModSlide(2), + "islide" => Op::ModSlide(3), + "oslide" => Op::ModSlide(4), + "pslide" => Op::ModSlide(5), "jit" => Op::ModRnd(0), "sjit" => Op::ModRnd(1), "drunk" => Op::ModRnd(2), diff --git a/crates/forth/src/words/sound.rs b/crates/forth/src/words/sound.rs index f4aa46a..ca18758 100644 --- a/crates/forth/src/words/sound.rs +++ b/crates/forth/src/words/sound.rs @@ -862,6 +862,36 @@ pub(super) const WORDS: &[Word] = &[ compile: Simple, varargs: false, }, + Word { + name: "islide", + aliases: &[], + category: "Audio Modulation", + stack: "(start end dur -- str)", + desc: "Swell transition (slow start, fast finish): start>end:duri", + example: "200 4000 1 islide lpf", + compile: Simple, + varargs: false, + }, + Word { + name: "oslide", + aliases: &[], + category: "Audio Modulation", + stack: "(start end dur -- str)", + desc: "Pluck transition (fast attack, slow settle): start>end:duro", + example: "0 1 0.5 oslide gain", + compile: Simple, + varargs: false, + }, + Word { + name: "pslide", + aliases: &[], + category: "Audio Modulation", + stack: "(start end dur -- str)", + desc: "Stair transition (8 discrete steps): start>end:durp", + example: "0 1 2 pslide gain", + compile: Simple, + varargs: false, + }, Word { name: "jit", aliases: &[],