Loop word
This commit is contained in:
@@ -80,4 +80,5 @@ pub enum Op {
|
|||||||
Range,
|
Range,
|
||||||
Noise,
|
Noise,
|
||||||
Chain,
|
Chain,
|
||||||
|
Loop,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -647,6 +647,13 @@ impl Forth {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Op::Loop => {
|
||||||
|
let beats = stack.pop().ok_or("stack underflow")?.as_float()?;
|
||||||
|
let dur = beats * 60.0 / ctx.tempo / ctx.speed;
|
||||||
|
cmd.set_param("fit".into(), dur.to_string());
|
||||||
|
cmd.set_param("dur".into(), dur.to_string());
|
||||||
|
}
|
||||||
|
|
||||||
Op::ListStart => {
|
Op::ListStart => {
|
||||||
stack.push(Value::Marker);
|
stack.push(Value::Marker);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -614,6 +614,13 @@ pub const WORDS: &[Word] = &[
|
|||||||
example: "{ emit } 3 div for",
|
example: "{ emit } 3 div for",
|
||||||
compile: Simple,
|
compile: Simple,
|
||||||
},
|
},
|
||||||
|
Word {
|
||||||
|
name: "loop",
|
||||||
|
stack: "(n --)",
|
||||||
|
desc: "Fit sample to n beats",
|
||||||
|
example: "\"break\" s 4 loop emit",
|
||||||
|
compile: Simple,
|
||||||
|
},
|
||||||
Word {
|
Word {
|
||||||
name: "|",
|
name: "|",
|
||||||
stack: "(-- marker)",
|
stack: "(-- marker)",
|
||||||
@@ -1565,6 +1572,7 @@ pub(super) fn simple_op(name: &str) -> Option<Op> {
|
|||||||
"range" => Op::Range,
|
"range" => Op::Range,
|
||||||
"noise" => Op::Noise,
|
"noise" => Op::Noise,
|
||||||
"chain" => Op::Chain,
|
"chain" => Op::Chain,
|
||||||
|
"loop" => Op::Loop,
|
||||||
_ => return None,
|
_ => return None,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user