diff options
Diffstat (limited to 'klangfarbrs/src/osc.rs')
-rw-r--r-- | klangfarbrs/src/osc.rs | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/klangfarbrs/src/osc.rs b/klangfarbrs/src/osc.rs index 9e3b147..fd78de1 100644 --- a/klangfarbrs/src/osc.rs +++ b/klangfarbrs/src/osc.rs @@ -1,11 +1,13 @@ use std::f32::consts::TAU; +use rand::Rng; use crate::{Waveform, Phase, Sample}; pub struct Osc {} impl Osc { - pub fn generate_sample(waveform: &Waveform, phase: Phase) -> Sample { + pub fn generate_sample(waveform: &Waveform, phase: Phase, last_value: Sample) -> Sample { let phase = phase; + let mut rng = rand::thread_rng(); match waveform { Waveform::Sine => { @@ -30,7 +32,15 @@ impl Osc { Waveform::Sawtooth => { 2.0 * phase - 1.0 - } + }, + + Waveform::WhiteNoise => { + (rng.gen::<f32>()).sin() + }, + + Waveform::BrownNoise => { + (last_value + (rng.gen::<f32>()) * 0.2 - 0.1).clamp(-1.0, 1.0) + }, } } } |