devalang_wasm/engine/audio/effects/processors/
bandpass.rs1use 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 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}