use super::Chorus;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(u32)]
pub enum ChorusMode {
Sine = 0,
Triangle = 1,
}
impl Default for ChorusMode {
fn default() -> Self {
ChorusMode::Sine
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct ChorusParams {
pub nr: u32,
pub level: f32,
pub speed: f32,
pub depth: f32,
pub mode: ChorusMode,
}
impl Default for ChorusParams {
fn default() -> Self {
Self {
nr: 3,
level: 2.0,
speed: 0.3,
depth: 8.0,
mode: ChorusMode::default(),
}
}
}
impl Chorus {
pub fn set_active(&mut self, on: bool) {
self.active = on;
}
pub fn active(&self) -> bool {
self.active
}
fn set_nr(&mut self, nr: u32) {
self.new_number_blocks = nr;
}
pub fn nr(&self) -> u32 {
self.number_blocks
}
fn set_level(&mut self, level: f32) {
self.new_level = level;
}
pub fn level(&self) -> f32 {
self.level
}
fn set_speed_hz(&mut self, speed_hz: f32) {
self.new_speed_hz = speed_hz;
}
pub fn speed_hz(&self) -> f32 {
self.speed_hz
}
fn set_depth_ms(&mut self, depth_ms: f32) {
self.new_depth_ms = depth_ms;
}
pub fn depth_ms(&self) -> f32 {
self.depth_ms
}
fn set_mode(&mut self, mode: ChorusMode) {
self.new_type = mode;
}
pub fn mode(&self) -> ChorusMode {
self.type_0
}
}
impl Chorus {
pub fn set_chorus(&mut self, params: &ChorusParams) {
self.set_chorus_params(
params.nr,
params.level,
params.speed,
params.depth,
params.mode,
);
}
pub fn set_chorus_params(
&mut self,
nr: u32,
level: f32,
speed: f32,
depth_ms: f32,
type_0: ChorusMode,
) {
self.set_nr(nr);
self.set_level(level);
self.set_speed_hz(speed);
self.set_depth_ms(depth_ms);
self.set_mode(type_0);
self.update();
}
pub fn get_chorus(&self) -> ChorusParams {
ChorusParams {
nr: self.nr(),
level: self.level(),
speed: self.speed_hz(),
depth: self.depth_ms(),
mode: self.mode(),
}
}
}