diff options
author | Jacob Lee <jacob@unabridgedsoftware.com> | 2021-11-24 23:32:31 -0500 |
---|---|---|
committer | Jacob Lee <jacob@unabridgedsoftware.com> | 2021-11-24 23:32:31 -0500 |
commit | af484658565920005a502553422530493a5d91de (patch) | |
tree | 15852bf7ee4b261e39f10a9a590cacfbb2762d15 /klangfarbrs/src/lib.rs | |
parent | 1a44b91562d41343da19e7521ab48b144881e2d0 (diff) |
Refactor envelope to use line iterator
Diffstat (limited to 'klangfarbrs/src/lib.rs')
-rw-r--r-- | klangfarbrs/src/lib.rs | 35 |
1 files changed, 33 insertions, 2 deletions
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, } } @@ -157,6 +167,26 @@ impl MonoSynth { } #[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, attack: Millisecond, decay: Millisecond, sustain: Amplitude, release: Millisecond @@ -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] |