464 lines
12 KiB
Rust
464 lines
12 KiB
Rust
use super::{Word, WordCompile::*};
|
|
|
|
// Time, Context, Probability, Generator, Desktop
|
|
pub(super) const WORDS: &[Word] = &[
|
|
// Probability
|
|
Word {
|
|
name: "rand",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(min max -- n|f)",
|
|
desc: "Random in range. Int if both args are int, float otherwise",
|
|
example: "1 6 rand => 4 | 0.0 1.0 rand => 0.42",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "exprand",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(lo hi -- f)",
|
|
desc: "Exponential random biased toward lo. Both args must be positive",
|
|
example: "1.0 100.0 exprand => 3.7",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "logrand",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(lo hi -- f)",
|
|
desc: "Exponential random biased toward hi. Both args must be positive",
|
|
example: "1.0 100.0 logrand => 87.2",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "seed",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(n --)",
|
|
desc: "Set random seed",
|
|
example: "12345 seed",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "coin",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(-- bool)",
|
|
desc: "50/50 random boolean",
|
|
example: "coin => 0 or 1",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "chance",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(quot prob --)",
|
|
desc: "Execute quotation with probability (0.0-1.0)",
|
|
example: "{ 2 distort } 0.75 chance",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "prob",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(quot pct --)",
|
|
desc: "Execute quotation with probability (0-100)",
|
|
example: "{ 2 distort } 75 prob",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "choose",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(..n n -- val)",
|
|
desc: "Random pick from n items",
|
|
example: "1 2 3 3 choose",
|
|
compile: Simple,
|
|
varargs: true,
|
|
},
|
|
Word {
|
|
name: "cycle",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(v1..vn n -- selected)",
|
|
desc: "Cycle through n items by step runs",
|
|
example: "60 64 67 3 cycle",
|
|
compile: Simple,
|
|
varargs: true,
|
|
},
|
|
Word {
|
|
name: "pcycle",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(v1..vn n -- selected)",
|
|
desc: "Cycle through n items by pattern iteration",
|
|
example: "60 64 67 3 pcycle",
|
|
compile: Simple,
|
|
varargs: true,
|
|
},
|
|
Word {
|
|
name: "bounce",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(v1..vn n -- selected)",
|
|
desc: "Ping-pong cycle through n items by step runs",
|
|
example: "60 64 67 72 4 bounce",
|
|
compile: Simple,
|
|
varargs: true,
|
|
},
|
|
Word {
|
|
name: "wchoose",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(v1 w1 v2 w2 ... n -- selected)",
|
|
desc: "Weighted random pick from n value/weight pairs",
|
|
example: "60 0.6 64 0.3 67 0.1 3 wchoose",
|
|
compile: Simple,
|
|
varargs: true,
|
|
},
|
|
Word {
|
|
name: "always",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(quot --)",
|
|
desc: "Always execute quotation",
|
|
example: "{ 2 distort } always",
|
|
compile: Probability(1.0),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "never",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(quot --)",
|
|
desc: "Never execute quotation",
|
|
example: "{ 2 distort } never",
|
|
compile: Probability(0.0),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "often",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(quot --)",
|
|
desc: "Execute quotation 75% of the time",
|
|
example: "{ 2 distort } often",
|
|
compile: Probability(0.75),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "sometimes",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(quot --)",
|
|
desc: "Execute quotation 50% of the time",
|
|
example: "{ 2 distort } sometimes",
|
|
compile: Probability(0.5),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "rarely",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(quot --)",
|
|
desc: "Execute quotation 25% of the time",
|
|
example: "{ 2 distort } rarely",
|
|
compile: Probability(0.25),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "almostNever",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(quot --)",
|
|
desc: "Execute quotation 10% of the time",
|
|
example: "{ 2 distort } almostNever",
|
|
compile: Probability(0.1),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "almostAlways",
|
|
aliases: &[],
|
|
category: "Probability",
|
|
stack: "(quot --)",
|
|
desc: "Execute quotation 90% of the time",
|
|
example: "{ 2 distort } almostAlways",
|
|
compile: Probability(0.9),
|
|
varargs: false,
|
|
},
|
|
// Time
|
|
Word {
|
|
name: "every",
|
|
aliases: &[],
|
|
category: "Time",
|
|
stack: "(n -- bool)",
|
|
desc: "True every nth iteration",
|
|
example: "4 every",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "loop",
|
|
aliases: &[],
|
|
category: "Time",
|
|
stack: "(n --)",
|
|
desc: "Fit sample to n beats",
|
|
example: "\"break\" s 4 loop @",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "tempo!",
|
|
aliases: &[],
|
|
category: "Time",
|
|
stack: "(bpm --)",
|
|
desc: "Set global tempo",
|
|
example: "140 tempo!",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "speed!",
|
|
aliases: &[],
|
|
category: "Time",
|
|
stack: "(multiplier --)",
|
|
desc: "Set pattern speed multiplier",
|
|
example: "2.0 speed!",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "chain",
|
|
aliases: &[],
|
|
category: "Time",
|
|
stack: "(bank pattern --)",
|
|
desc: "Chain to bank/pattern (1-indexed) when current pattern ends",
|
|
example: "1 4 chain",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "at",
|
|
aliases: &[],
|
|
category: "Time",
|
|
stack: "(v1..vn --)",
|
|
desc: "Set delta context for emit timing",
|
|
example: "0 0.5 at kick s . => emits at 0 and 0.5 of step",
|
|
compile: Simple,
|
|
varargs: true,
|
|
},
|
|
// Context
|
|
Word {
|
|
name: "step",
|
|
aliases: &[],
|
|
category: "Context",
|
|
stack: "(-- n)",
|
|
desc: "Current step index",
|
|
example: "step => 0",
|
|
compile: Context("step"),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "beat",
|
|
aliases: &[],
|
|
category: "Context",
|
|
stack: "(-- f)",
|
|
desc: "Current beat position",
|
|
example: "beat => 4.5",
|
|
compile: Context("beat"),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "pattern",
|
|
aliases: &[],
|
|
category: "Context",
|
|
stack: "(-- n)",
|
|
desc: "Current pattern index",
|
|
example: "pattern => 0",
|
|
compile: Context("pattern"),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "pbank",
|
|
aliases: &[],
|
|
category: "Context",
|
|
stack: "(-- n)",
|
|
desc: "Current pattern's bank index",
|
|
example: "pbank => 0",
|
|
compile: Context("bank"),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "tempo",
|
|
aliases: &[],
|
|
category: "Context",
|
|
stack: "(-- f)",
|
|
desc: "Current BPM",
|
|
example: "tempo => 120.0",
|
|
compile: Context("tempo"),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "phase",
|
|
aliases: &[],
|
|
category: "Context",
|
|
stack: "(-- f)",
|
|
desc: "Phase in bar (0-1)",
|
|
example: "phase => 0.25",
|
|
compile: Context("phase"),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "slot",
|
|
aliases: &[],
|
|
category: "Context",
|
|
stack: "(-- n)",
|
|
desc: "Current slot number",
|
|
example: "slot => 0",
|
|
compile: Context("slot"),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "runs",
|
|
aliases: &[],
|
|
category: "Context",
|
|
stack: "(-- n)",
|
|
desc: "Times this step ran",
|
|
example: "runs => 3",
|
|
compile: Context("runs"),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "iter",
|
|
aliases: &[],
|
|
category: "Context",
|
|
stack: "(-- n)",
|
|
desc: "Pattern iteration count",
|
|
example: "iter => 2",
|
|
compile: Context("iter"),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "stepdur",
|
|
aliases: &[],
|
|
category: "Context",
|
|
stack: "(-- f)",
|
|
desc: "Step duration in seconds",
|
|
example: "stepdur => 0.125",
|
|
compile: Context("stepdur"),
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "fill",
|
|
aliases: &[],
|
|
category: "Context",
|
|
stack: "(-- bool)",
|
|
desc: "True when fill is on (f key)",
|
|
example: "\"snare\" s . fill ?",
|
|
compile: Context("fill"),
|
|
varargs: false,
|
|
},
|
|
// Desktop
|
|
#[cfg(feature = "desktop")]
|
|
Word {
|
|
name: "mx",
|
|
aliases: &[],
|
|
category: "Desktop",
|
|
stack: "(-- x)",
|
|
desc: "Normalized mouse X position (0-1)",
|
|
example: "mx 440 880 range freq",
|
|
compile: Context("mx"),
|
|
varargs: false,
|
|
},
|
|
#[cfg(feature = "desktop")]
|
|
Word {
|
|
name: "my",
|
|
aliases: &[],
|
|
category: "Desktop",
|
|
stack: "(-- y)",
|
|
desc: "Normalized mouse Y position (0-1)",
|
|
example: "my 0.1 0.9 range gain",
|
|
compile: Context("my"),
|
|
varargs: false,
|
|
},
|
|
#[cfg(feature = "desktop")]
|
|
Word {
|
|
name: "mdown",
|
|
aliases: &[],
|
|
category: "Desktop",
|
|
stack: "(-- bool)",
|
|
desc: "1 when mouse button held, 0 otherwise",
|
|
example: "mdown { \"crash\" s . } ?",
|
|
compile: Context("mdown"),
|
|
varargs: false,
|
|
},
|
|
// Generator
|
|
Word {
|
|
name: "..",
|
|
aliases: &[],
|
|
category: "Generator",
|
|
stack: "(start end -- start start+1 ... end)",
|
|
desc: "Push arithmetic sequence from start to end",
|
|
example: "1 4 .. => 1 2 3 4",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: ".,",
|
|
aliases: &[],
|
|
category: "Generator",
|
|
stack: "(start end step -- start start+step ...)",
|
|
desc: "Push arithmetic sequence with custom step",
|
|
example: "0 1 0.25 ., => 0 0.25 0.5 0.75 1",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "gen",
|
|
aliases: &[],
|
|
category: "Generator",
|
|
stack: "(quot n -- results...)",
|
|
desc: "Execute quotation n times, push all results",
|
|
example: "{ 1 6 rand } 4 gen => 4 random values",
|
|
compile: Simple,
|
|
varargs: true,
|
|
},
|
|
Word {
|
|
name: "geom..",
|
|
aliases: &[],
|
|
category: "Generator",
|
|
stack: "(start ratio count -- start start*r start*r^2 ...)",
|
|
desc: "Push geometric sequence",
|
|
example: "1 2 4 geom.. => 1 2 4 8",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "euclid",
|
|
aliases: &[],
|
|
category: "Generator",
|
|
stack: "(k n -- i1 i2 ... ik)",
|
|
desc: "Push indices for k hits evenly distributed over n steps",
|
|
example: "4 8 euclid => 0 2 4 6",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
Word {
|
|
name: "euclidrot",
|
|
aliases: &[],
|
|
category: "Generator",
|
|
stack: "(k n r -- i1 i2 ... ik)",
|
|
desc: "Push Euclidean indices with rotation r",
|
|
example: "3 8 2 euclidrot => 1 4 6",
|
|
compile: Simple,
|
|
varargs: false,
|
|
},
|
|
];
|