smoother time parameter for the scope

This commit is contained in:
Weird Constructor 2022-07-26 06:58:30 +02:00
parent a025c7fbe2
commit 30284e27dc
2 changed files with 28 additions and 9 deletions

View file

@ -1215,6 +1215,22 @@ macro_rules! f_lfot {
}; };
} }
macro_rules! f_lfoms {
($formatter: expr, $v: expr, $denorm_v: expr) => {
if $denorm_v < 10.0 {
write!($formatter, "{:5.3}ms", $denorm_v)
} else if $denorm_v < 250.0 {
write!($formatter, "{:4.1}ms", $denorm_v)
} else if $denorm_v < 1500.0 {
write!($formatter, "{:4.0}ms", $denorm_v)
} else if $denorm_v < 10000.0 {
write!($formatter, "{:5.2}s", $denorm_v / 1000.0)
} else {
write!($formatter, "{:5.1}s", $denorm_v / 1000.0)
}
};
}
macro_rules! f_det { macro_rules! f_det {
($formatter: expr, $v: expr, $denorm_v: expr) => {{ ($formatter: expr, $v: expr, $denorm_v: expr) => {{
let sign = if $denorm_v < 0.0 { -1.0 } else { 1.0 }; let sign = if $denorm_v < 0.0 { -1.0 } else { 1.0 };
@ -1412,7 +1428,7 @@ macro_rules! node_list {
(0 in1 n_id d_id r_id f_def stp_d -1.0, 1.0, 0.0) (0 in1 n_id d_id r_id f_def stp_d -1.0, 1.0, 0.0)
(1 in2 n_id d_id r_id f_def stp_d -1.0, 1.0, 0.0) (1 in2 n_id d_id r_id f_def stp_d -1.0, 1.0, 0.0)
(2 in3 n_id d_id r_id f_def stp_d -1.0, 1.0, 0.0) (2 in3 n_id d_id r_id f_def stp_d -1.0, 1.0, 0.0)
(3 time n_lfot d_lfot r_lfot f_lfot stp_f 0.0, 1.0, 1000.0) (3 time n_lfot d_lfot r_lfot f_lfoms stp_f 0.0, 1.0, 1000.0)
(4 trig n_id d_id r_id f_def stp_d -1.0, 1.0, 0.0) (4 trig n_id d_id r_id f_def stp_d -1.0, 1.0, 0.0)
(5 thrsh n_id d_id r_id f_def stp_d -1.0, 1.0, 0.0) (5 thrsh n_id d_id r_id f_def stp_d -1.0, 1.0, 0.0)
(6 off1 n_id d_id r_id f_def stp_d -1.0, 1.0, 0.0) (6 off1 n_id d_id r_id f_def stp_d -1.0, 1.0, 0.0)

View file

@ -33,7 +33,7 @@ macro_rules! fa_scope_tsrc {
pub struct Scope { pub struct Scope {
handle: Arc<ScopeHandle>, handle: Arc<ScopeHandle>,
idx: usize, idx: usize,
frame_count: usize, frame_time: f32,
srate_ms: f32, srate_ms: f32,
trig: CustomTrigger, trig: CustomTrigger,
} }
@ -44,7 +44,7 @@ impl Scope {
handle: ScopeHandle::new_shared(), handle: ScopeHandle::new_shared(),
idx: 0, idx: 0,
srate_ms: 44.1, srate_ms: 44.1,
frame_count: 0, frame_time: 0.0,
trig: CustomTrigger::new(0.0, 0.0001), trig: CustomTrigger::new(0.0, 0.0001),
} }
} }
@ -129,11 +129,14 @@ impl DspNode for Scope {
let time = denorm::Scope::time(time, 0); let time = denorm::Scope::time(time, 0);
let samples_per_block = (time * self.srate_ms) / SCOPE_SAMPLES as f32; let samples_per_block = (time * self.srate_ms) / SCOPE_SAMPLES as f32;
let time_per_block = time / SCOPE_SAMPLES as f32;
let sample_time = 1.0 / self.srate_ms;
let threshold = denorm::Scope::thrsh(thrsh, 0); let threshold = denorm::Scope::thrsh(thrsh, 0);
self.trig.set_threshold(threshold, threshold + 0.001); self.trig.set_threshold(threshold, threshold + 0.001);
let trigger_input = in1; let trigger_input = in1;
//d// println!("TIME time={}; st={}; tpb={}; frame_time={}", time, sample_time, time_per_block, self.frame_time);
if samples_per_block < 1.0 { if samples_per_block < 1.0 {
let copy_count = ((1.0 / samples_per_block) as usize).min(SCOPE_SAMPLES); let copy_count = ((1.0 / samples_per_block) as usize).min(SCOPE_SAMPLES);
@ -148,30 +151,30 @@ impl DspNode for Scope {
} }
if self.idx >= SCOPE_SAMPLES && self.trig.check_trigger(trigger_input.read(frame)) { if self.idx >= SCOPE_SAMPLES && self.trig.check_trigger(trigger_input.read(frame)) {
self.frame_count = 0; self.frame_time = 0.0;
self.idx = 0; self.idx = 0;
} }
} }
} else { } else {
let samples_per_block = samples_per_block as usize; // let samples_per_block = samples_per_block as usize;
for frame in 0..ctx.nframes() { for frame in 0..ctx.nframes() {
if self.idx < SCOPE_SAMPLES { if self.idx < SCOPE_SAMPLES {
if self.frame_count >= samples_per_block { if self.frame_time >= time_per_block {
for (i, input) in inputs.iter().enumerate() { for (i, input) in inputs.iter().enumerate() {
let in_val = input.read(frame); let in_val = input.read(frame);
self.handle.write(i, self.idx, in_val); self.handle.write(i, self.idx, in_val);
} }
self.idx = self.idx.saturating_add(1); self.idx = self.idx.saturating_add(1);
self.frame_count = 0; self.frame_time -= time_per_block;
} }
self.frame_count += 1; self.frame_time += sample_time;
} }
if self.idx >= SCOPE_SAMPLES && self.trig.check_trigger(trigger_input.read(frame)) { if self.idx >= SCOPE_SAMPLES && self.trig.check_trigger(trigger_input.read(frame)) {
self.frame_count = 0; self.frame_time = 0.0;
self.idx = 0; self.idx = 0;
} }
} }