Fix the top reflection in the RndWk max
This commit is contained in:
parent
488192fd81
commit
a9ac7ec1e8
2 changed files with 16 additions and 7 deletions
|
@ -128,11 +128,19 @@ impl DspNode for RndWk {
|
|||
let step = denorm::RndWk::step(step, frame).clamp(-1.0, 1.0);
|
||||
let offs = denorm::RndWk::offs(offs, frame).clamp(-1.0, 1.0);
|
||||
|
||||
let target =
|
||||
let mut target =
|
||||
self.slew_val.value() as f32
|
||||
+ ((self.rng.next() * 2.0 * step) - step)
|
||||
+ offs;
|
||||
self.target = (((target - min) % delta).abs() + min) as f64;
|
||||
|
||||
// println!("{:8.6} {:8.6} {:8.6}", min, max, target);
|
||||
// clamp target into a range we can reflect
|
||||
target = target.clamp(min - (delta * 0.99), max + (delta * 0.99));
|
||||
// reflect back the overshoots:
|
||||
if target > max { target = max - (max - target).abs(); }
|
||||
if target < min { target = min + (min - target).abs(); }
|
||||
|
||||
self.target = target as f64;
|
||||
}
|
||||
|
||||
let slew_time_ms = denorm::RndWk::slew(slew, frame);
|
||||
|
|
|
@ -152,14 +152,15 @@ fn check_node_rndwk_max() {
|
|||
pset_n(&mut matrix, rwk, "trig", 1.0);
|
||||
run_for_ms(&mut node_exec, 7.0); // wait for trigger...
|
||||
|
||||
let (out_l, _) = run_for_ms(&mut node_exec, 20.0);
|
||||
assert_decimated_feq!(out_l, 60, vec![
|
||||
let (out_l, _) = run_for_ms(&mut node_exec, 50.0);
|
||||
assert_decimated_feq!(out_l, 200, vec![
|
||||
0.0, // start value
|
||||
// slew ramp:
|
||||
0.011791383, 0.029931974, 0.04807256, 0.06621315,
|
||||
0.054119427, 0.11458806, 0.1750567, 0.23552532, 0.29599395,
|
||||
0.3564626, 0.4169312,
|
||||
// end value
|
||||
// which is 0.5 - 0.56891763
|
||||
0.06891763, 0.06891763,
|
||||
// which is (0.5 - 0.43108237) == 0.06891763
|
||||
0.43108237, 0.43108237, 0.43108237, 0.43108237
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue