From af484658565920005a502553422530493a5d91de Mon Sep 17 00:00:00 2001 From: Jacob Lee Date: Wed, 24 Nov 2021 23:32:31 -0500 Subject: Refactor envelope to use line iterator --- klangfarbrs/src/lib.rs | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) (limited to 'klangfarbrs/src/lib.rs') diff --git a/klangfarbrs/src/lib.rs b/klangfarbrs/src/lib.rs index fc5e6f9..e64246c 100644 --- a/klangfarbrs/src/lib.rs +++ b/klangfarbrs/src/lib.rs @@ -13,6 +13,8 @@ use gdnative::prelude::*; use gdnative::core_types::TypedArray; mod phasor; +mod line; +use line::Line; mod osc; use osc::{Osc, Waveform}; @@ -46,6 +48,10 @@ pub struct MonoSynth { pub frequency_modulation: bool, pub fm_frequency: Hz, pub fm_depth: Amplitude, + pub attack: Millisecond, + pub decay: Millisecond, + pub sustain: Amplitude, + pub release: Millisecond, fm_osc: Osc, } @@ -77,6 +83,10 @@ impl MonoSynth { fm_frequency: 10.0, fm_depth: 0.1, fm_osc: Osc::new(freq * 2.0, sprt), + attack: 10, + decay: 100, + sustain: 0.5, + release: 500, } } @@ -156,6 +166,26 @@ impl MonoSynth { self.fm_depth = fm_depth } + #[export] + fn set_attack(&mut self, _owner: &Node, attack: Millisecond) { + self.attack = attack + } + + #[export] + fn set_decay(&mut self, _owner: &Node, decay: Millisecond) { + self.decay = decay + } + + #[export] + fn set_sustain(&mut self, _owner: &Node, sustain: Amplitude) { + self.sustain = sustain + } + + #[export] + fn set_release(&mut self, _owner: &Node, release: Millisecond) { + self.release = release + } + #[export] fn envelope( &mut self, _owner: &Node, @@ -165,8 +195,9 @@ impl MonoSynth { } #[export] - fn trigger(&mut self, _owner: &Node) { - self.envelope.index = 0; + fn trigger(&mut self, _owner: &Node, + ) { + self.envelope = Envelope::new(self.attack, self.decay, self.sustain, self.release, self.sample_rate); } #[export] -- cgit v1.2.3