rytm_rs/object/kit/
reverb.rs1use crate::error::{ConversionError, ParameterError, RytmError};
2use rytm_rs_macro::parameter_range;
3use rytm_sys::ar_kit_t;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
8pub struct FxReverb {
9 pre_delay: u8,
10 decay: u8,
11 freq: u8,
12 gain: u8,
13 hpf: u8,
14 lpf: u8,
15 volume: u8,
16}
17
18impl Default for FxReverb {
19 fn default() -> Self {
20 Self {
21 pre_delay: 8,
22 decay: 40,
23 freq: 64,
24 gain: 32,
25 hpf: 32,
26 lpf: 96,
27 volume: 110,
28 }
29 }
30}
31
32impl TryFrom<&ar_kit_t> for FxReverb {
33 type Error = ConversionError;
34 fn try_from(raw_kit: &ar_kit_t) -> Result<Self, Self::Error> {
35 Ok(Self {
36 pre_delay: raw_kit.fx_reverb_pre,
37 decay: raw_kit.fx_reverb_decay,
38 freq: raw_kit.fx_reverb_freq,
39 gain: raw_kit.fx_reverb_gain,
40 hpf: raw_kit.fx_reverb_hpf,
41 lpf: raw_kit.fx_reverb_lpf,
42 volume: raw_kit.fx_reverb_volume,
43 })
44 }
45}
46
47impl FxReverb {
48 pub(crate) fn apply_to_raw_kit(self, raw_kit: &mut ar_kit_t) {
49 raw_kit.fx_reverb_pre = self.pre_delay;
50 raw_kit.fx_reverb_decay = self.decay;
51 raw_kit.fx_reverb_freq = self.freq;
52 raw_kit.fx_reverb_gain = self.gain;
53 raw_kit.fx_reverb_hpf = self.hpf;
54 raw_kit.fx_reverb_lpf = self.lpf;
55 raw_kit.fx_reverb_volume = self.volume;
56 }
57
58 #[parameter_range(range = "pre_delay:0..=127")]
62 pub fn set_pre_delay(&mut self, pre_delay: usize) -> Result<(), RytmError> {
63 self.pre_delay = pre_delay as u8;
64 Ok(())
65 }
66
67 #[parameter_range(range = "decay:0..=127")]
73 pub fn set_decay(&mut self, decay: usize) -> Result<(), RytmError> {
74 self.decay = decay as u8;
75 Ok(())
76 }
77
78 #[parameter_range(range = "freq:0..=127")]
82 pub fn set_freq(&mut self, freq: usize) -> Result<(), RytmError> {
83 self.freq = freq as u8;
84 Ok(())
85 }
86
87 #[parameter_range(range = "gain:0..=127")]
91 pub fn set_gain(&mut self, gain: usize) -> Result<(), RytmError> {
92 self.gain = gain as u8;
93 Ok(())
94 }
95
96 #[parameter_range(range = "hpf:0..=127")]
100 pub fn set_hpf(&mut self, hpf: usize) -> Result<(), RytmError> {
101 self.hpf = hpf as u8;
102 Ok(())
103 }
104
105 #[parameter_range(range = "lpf:0..=127")]
109 pub fn set_lpf(&mut self, lpf: usize) -> Result<(), RytmError> {
110 self.lpf = lpf as u8;
111 Ok(())
112 }
113 #[parameter_range(range = "volume:0..=127")]
117 pub fn set_volume(&mut self, volume: usize) -> Result<(), RytmError> {
118 self.volume = volume as u8;
119 Ok(())
120 }
121
122 pub const fn pre_delay(&self) -> usize {
126 self.pre_delay as usize
127 }
128
129 pub const fn decay(&self) -> usize {
133 self.decay as usize
134 }
135
136 pub const fn freq(&self) -> usize {
140 self.freq as usize
141 }
142
143 pub const fn gain(&self) -> usize {
147 self.gain as usize
148 }
149
150 pub const fn hpf(&self) -> usize {
154 self.hpf as usize
155 }
156
157 pub const fn lpf(&self) -> usize {
161 self.lpf as usize
162 }
163
164 pub const fn volume(&self) -> usize {
168 self.volume as usize
169 }
170}