cloudseedcore_rs/
reverb.rs1use crate::bridge::*;
2use crate::{ParamId, Program};
3
4pub struct ReverbController {
8 inner: cxx::UniquePtr<CloudSeedReverb>,
9 max_block_size: u32,
10}
11
12unsafe impl Send for ReverbController {}
14
15impl ReverbController {
16 pub fn new(sample_rate: f32, max_block_size: u32) -> Self {
19 let inner = cs_new_reverb(sample_rate, max_block_size);
20 Self {
21 inner,
22 max_block_size,
23 }
24 }
25
26 pub fn max_block_size(&self) -> u32 {
28 self.max_block_size
29 }
30
31 pub fn process(
35 &mut self,
36 in_l: &[f32],
37 in_r: &[f32],
38 out_l: &mut [f32],
39 out_r: &mut [f32],
40 num_samples: u32,
41 ) {
42 assert!(num_samples <= self.max_block_size);
43
44 self.inner
45 .as_mut()
46 .unwrap()
47 .process(in_l, in_r, out_l, out_r, num_samples);
48 }
49
50 pub fn reset(&mut self) {
52 self.inner.as_mut().unwrap().reset();
53 }
54
55 pub fn set_sample_rate(&mut self, sample_rate: f32) {
57 self.inner.as_mut().unwrap().set_sample_rate(sample_rate);
58 }
59
60 pub fn set_parameter(&mut self, id: ParamId, value: f32) {
63 let id: u8 = id.into();
64 self.inner.as_mut().unwrap().set_parameter(id as u32, value);
65 }
66
67 pub fn get_parameter(&self, id: ParamId) -> f32 {
69 let id: u8 = id.into();
70 self.inner.as_ref().unwrap().get_parameter(id as u32)
71 }
72
73 pub fn get_program(&self) -> Program {
76 let mut vals = [0.0f32; 45];
78 self.inner.as_ref().unwrap().get_all_parameters(&mut vals);
79 Program::from_array(vals)
80 }
81
82 pub fn set_program(&mut self, program: &Program) {
84 let params = program.to_array();
85 self.inner.as_mut().unwrap().load_program(¶ms);
86 }
87}