1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//! # Modifiers
//! 
//! Module including many of the common/basic filters including lowpass,
//! bandpass, echo, delay, etc.

use super::*;
use std::rc::Rc;

pub mod adsr;
pub mod bandpass;
pub mod delay;
pub mod echo;
pub mod passthrough;
pub mod envelope;
pub mod gain;
pub mod generic;
pub mod highpass;
pub mod lowpass;

pub use adsr::*;
pub use bandpass::*;
pub use delay::*;
pub use echo::*;
pub use passthrough::*;
pub use envelope::*;
pub use gain::*;
pub use generic::*;
pub use highpass::*;
pub use lowpass::*;

/// The `Modifier` trait defines types that filter audio samples.
/// 
/// [`Modifier`]: trait.Modifier.html
/// [`Clone`]: https://doc.rust-lang.org/std/clone/trait.Clone.html
pub trait Modifier
{
    /// Filters the given audio sample.
    /// 
    /// # Parameters
    /// 
    /// * `x` - The "dry" audio sample before filtering.
    fn process(&mut self, x: SampleT) -> SampleT;
}

/// Type alias for a [`Modifier`] wrapped in an [`Rc`].
/// 
/// [`Modifier`]: trait.Modifier.html
/// [`Rc`]: https://doc.rust-lang.org/std/rc/struct.Rc.html
pub type ModifierRc = Rc<dyn Modifier>;