summaryrefslogtreecommitdiff
path: root/klangfarbrs/src/osc.rs
diff options
context:
space:
mode:
Diffstat (limited to 'klangfarbrs/src/osc.rs')
-rw-r--r--klangfarbrs/src/osc.rs14
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)
+ },
}
}
}