Skip to content

Commit

Permalink
fix svfmixer example
Browse files Browse the repository at this point in the history
  • Loading branch information
SolarLiner committed Nov 27, 2023
1 parent 1317755 commit b023a46
Showing 1 changed file with 29 additions and 32 deletions.
61 changes: 29 additions & 32 deletions examples/svfmixer/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::sync::Arc;

use nih_plug::prelude::*;

use valib::dsp::DSP;
use valib::{dsp::DSP, Scalar};
use valib::simd::{AutoSimd, SimdValue};
use valib::{clippers::DiodeClipperModel, oversample::Oversample, svf::Svf};

Expand Down Expand Up @@ -103,7 +103,7 @@ impl Default for Plugin {
let q = Sample::splat(params.q.default_plain_value());
Self {
params,
svf: Svf::new(Sample::one(), fc, Sample::one() - q),
svf: Svf::new(Sample::from_f64(1.0), fc, Sample::from_f64(1.0) - q).with_saturators(DiodeClipperModel::new_germanium(3, 2), DiodeClipperModel::new_germanium(3, 2)),
oversample: Oversample::new(OVERSAMPLE, MAX_BUFFER_SIZE),
}
}
Expand Down Expand Up @@ -160,9 +160,14 @@ impl nih_plug::prelude::Plugin for Plugin {
let mut lp_gain = [0.; MAX_BUFFER_SIZE];
let mut bp_gain = [0.; MAX_BUFFER_SIZE];
let mut hp_gain = [0.; MAX_BUFFER_SIZE];
let mut simd_slice = [Sample::from_f64(0.0); MAX_BUFFER_SIZE];
for (_, mut block) in buffer.iter_blocks(MAX_BUFFER_SIZE) {
for (i, mut sample) in block.iter_samples().enumerate() {
simd_slice[i] = Sample::new(sample.get_mut(0).copied().unwrap(), sample.get_mut(1).copied().unwrap());
}
let len = block.samples();
let os_len = OVERSAMPLE * len;

self.params.fc.smoothed.next_block_exact(&mut fc[..len]);
self.params.q.smoothed.next_block_exact(&mut q[..len]);
self.params
Expand All @@ -177,48 +182,40 @@ impl nih_plug::prelude::Plugin for Plugin {
.hp_gain
.smoothed
.next_block_exact(&mut hp_gain[..len]);

let mut os_fc = [0.; OVERSAMPLE * MAX_BUFFER_SIZE];
let mut os_q = [0.; OVERSAMPLE * MAX_BUFFER_SIZE];
let mut os_lp_gain = [0.; OVERSAMPLE * MAX_BUFFER_SIZE];
let mut os_bp_gain = [0.; OVERSAMPLE * MAX_BUFFER_SIZE];
let mut os_hp_gain = [0.; OVERSAMPLE * MAX_BUFFER_SIZE];

valib::util::lerp_block(&mut os_fc[..os_len], &fc[..len]);
valib::util::lerp_block(&mut os_q[..os_len], &q[..len]);
valib::util::lerp_block(&mut os_lp_gain[..os_len], &lp_gain[..len]);
valib::util::lerp_block(&mut os_bp_gain[..os_len], &bp_gain[..len]);
valib::util::lerp_block(&mut os_hp_gain[..os_len], &hp_gain[..len]);
block.
for ch in 0..2 {
let buffer = block.get_mut(ch).unwrap();
let mut os_buffer = self.oversample[ch].oversample(buffer);
for (i, s) in os_buffer.iter_mut().enumerate() {
let fc = os_fc[i];
let q = os_q[i];
let lp_gain = os_lp_gain[i];
let bp_gain = os_bp_gain[i];
let hp_gain = os_hp_gain[i];

self.svf[ch].set_cutoff(fc);
self.svf[ch].set_r(1. - q);
let [lp, bp, hp] = self.svf[ch].process([*s]);
*s = lp * lp_gain + bp * bp_gain + hp * hp_gain;
}
os_buffer.finish(buffer);

let buffer = &mut simd_slice[..len];
let mut os_buffer = self.oversample.oversample(buffer);
for (i, s) in os_buffer.iter_mut().enumerate() {
let fc = os_fc[i];
let q = os_q[i];
let lp_gain = Sample::splat(os_lp_gain[i]);
let bp_gain = Sample::splat(os_bp_gain[i]);
let hp_gain = Sample::splat(os_hp_gain[i]);

self.svf.set_cutoff(Sample::splat(fc));
self.svf.set_r(Sample::splat(1. - q));
let [lp, bp, hp] = self.svf.process([*s]);
*s = lp * lp_gain + bp * bp_gain + hp * hp_gain;
}
os_buffer.finish(buffer);

for (i, mut s) in block.iter_samples().enumerate() {
*s.get_mut(0).unwrap() = buffer[i].extract(0);
*s.get_mut(1).unwrap() = buffer[i].extract(1);
}
}
// for samples in buffer.iter_samples() {
// let fc = self.params.fc.smoothed.next();
// let q = self.params.q.smoothed.next();
// let lp_gain = self.params.lp_gain.smoothed.next();
// let bp_gain = self.params.bp_gain.smoothed.next();
// let hp_gain = self.params.hp_gain.smoothed.next();
// for (ch, f) in samples.into_iter().zip(&mut self.svf) {
// f.set_cutoff(fc);
// f.set_r(1. - q);
// let [lp, bp, hp] = f.process([*ch]);
// *ch = lp * lp_gain + bp * bp_gain + hp * hp_gain;
// }
// }

ProcessStatus::Normal
}
Expand Down

0 comments on commit b023a46

Please sign in to comment.