mod graphic;
mod parametric;
pub use graphic::*;
pub use parametric::*;
use super::Biquad;
use super::Result;
use crate::{
filter::{Filter, StandardFilterDescriptor},
*,
};
use serde::{Deserialize, Serialize};
pub trait FilterGenerator {
fn genFilter(&self, fs: StrictlyPositive) -> Result<Filter>;
}
#[cfg_attr(
feature = "python-bindings",
gen_stub_pyclass_complex_enum,
pyclass(from_py_object)
)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Equalizer {
Graphic {
config: GraphicEqualizer,
},
Parametric {
config: ParametricEqualizer,
},
}
impl Default for Equalizer {
fn default() -> Self {
Equalizer::Parametric {
config: ParametricEqualizer::default(),
}
}
}
impl FilterGenerator for Equalizer {
fn genFilter(&self, fs: StrictlyPositive) -> Result<Filter> {
match self {
Equalizer::Graphic { config } => config.genFilter(fs),
Equalizer::Parametric { config } => config.genFilter(fs),
}
}
}