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
ix!();
use crate::{
SineWaveOscillator,
SineWaveOscillatorParam,
};
impl SineWaveOscillator {
pub fn do_sine_block(&mut self, k: usize, omega: f64, fm: bool) {
let wf_mode: i32 = self.pvali(SineWaveOscillatorParam::Shape);
let master_osc: f64 = unsafe {
*self.master_osc.add(k) as f64
};
let mut p: f32 =
(self.phase + self.lastvalue as f64) as f32;
if fm {
p += (self.fm_depth.v * master_osc) as f32;
}
self.out.l[k] =
Self::value_from_sin_and_cos( p.sin(), p.cos(), wf_mode );
self.phase += omega;
self.lastvalue = self.out.l[k] * (self.feedback.v as f32);
self.fm_depth.process();
self.feedback.process();
}
}