cxx_juce/
juce_audio_basics.rs1use {
4 std::f64::consts::FRAC_1_SQRT_2,
5 {crate::juce, cxx::UniquePtr},
6};
7
8pub struct IIRFilter(UniquePtr<juce::SingleThreadedIIRFilter>);
10
11unsafe impl Send for IIRFilter {}
12
13#[derive(Debug, Copy, Clone)]
15pub struct Q(pub f64);
16
17impl Default for Q {
18 fn default() -> Self {
19 Self(FRAC_1_SQRT_2)
20 }
21}
22
23impl IIRFilter {
24 pub fn low_pass(sample_rate: f64, frequency: f64, Q(q): Q) -> Self {
26 Self(juce::create_iir_filter(juce::make_low_pass(
27 sample_rate,
28 frequency,
29 q,
30 )))
31 }
32
33 pub fn high_pass(sample_rate: f64, frequency: f64, Q(q): Q) -> Self {
35 Self(juce::create_iir_filter(juce::make_high_pass(
36 sample_rate,
37 frequency,
38 q,
39 )))
40 }
41
42 pub fn notch(sample_rate: f64, frequency: f64, Q(q): Q) -> Self {
44 Self(juce::create_iir_filter(juce::make_notch_filter(
45 sample_rate,
46 frequency,
47 q,
48 )))
49 }
50
51 pub fn process(&mut self, samples: &mut [f32]) {
53 unsafe {
54 self.0
55 .pin_mut()
56 .process_samples(samples.as_mut_ptr(), samples.len() as i32)
57 }
58 }
59}