From a78f43d5a79e0bbe0d41d60b3527da3cfec7f117 Mon Sep 17 00:00:00 2001 From: Jacob Lee Date: Thu, 11 Nov 2021 13:05:20 -0500 Subject: Implement White/Brown noise. Refactor needed --- klangfarbrs/src/osc.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'klangfarbrs/src/osc.rs') 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::()).sin() + }, + + Waveform::BrownNoise => { + (last_value + (rng.gen::()) * 0.2 - 0.1).clamp(-1.0, 1.0) + }, } } } -- cgit v1.2.3