devalang_wasm/engine/audio/effects/processors/
bandpass.rs

1use crate::engine::audio::effects::processors::super_trait::EffectProcessor;
2use crate::engine::audio::effects::processors::{HighpassProcessor, LowpassProcessor};
3
4#[derive(Debug, Clone)]
5pub struct BandpassProcessor {
6    pub cutoff: f32,
7    pub resonance: f32,
8    lp: LowpassProcessor,
9    hp: HighpassProcessor,
10}
11
12impl BandpassProcessor {
13    pub fn new(cutoff: f32, resonance: f32) -> Self {
14        Self {
15            cutoff: cutoff.clamp(20.0, 20000.0),
16            resonance: resonance.clamp(0.0, 1.0),
17            lp: LowpassProcessor::new(cutoff * 1.5, resonance),
18            hp: HighpassProcessor::new((cutoff * 0.5).max(20.0), resonance),
19        }
20    }
21}
22
23impl Default for BandpassProcessor {
24    fn default() -> Self {
25        Self::new(1000.0, 0.2)
26    }
27}
28
29impl EffectProcessor for BandpassProcessor {
30    fn process(&mut self, samples: &mut [f32], sr: u32) {
31        // apply highpass then lowpass to get a band
32        self.hp.process(samples, sr);
33        self.lp.process(samples, sr);
34    }
35
36    fn reset(&mut self) {
37        self.lp.reset();
38        self.hp.reset();
39    }
40
41    fn name(&self) -> &str {
42        "Bandpass"
43    }
44}