pub struct EnvRetrigAD { /* private fields */ }
Expand description
A retriggerable AD (Attack & Decay) envelope with modifyable shapes for the attack and decay.
For a more elaborate example see EnvRetrigAD::tick.
use synfx_dsp::EnvRetrigAD;
let mut env = EnvRetrigAD::new();
// ..
env.set_sample_rate(44100.0);
// ..
let attack_ms = 3.0;
let decay_ms = 10.0;
let attack_shape = 0.5; // 0.5 == linear
let decay_shape = 0.5; // 0.5 == linear
let trigger_signal = 0.0; // Raise to 1.0 for trigger.
let (value, retrig) = env.tick(trigger_signal, attack_ms, attack_shape, decay_ms, decay_shape);
// ..
Note: The code for this envelope is used and tested by the Ad
node of HexoDSP.
Implementations§
Source§impl EnvRetrigAD
impl EnvRetrigAD
Sourcepub fn set_sample_rate(&mut self, srate: f32)
pub fn set_sample_rate(&mut self, srate: f32)
Set the sample rate of the envelope. Unit in samples per second.
Sourcepub fn tick(
&mut self,
trigger: f32,
attack_ms: f32,
attack_shape: f32,
decay_ms: f32,
decay_shape: f32,
) -> (f32, f32)
pub fn tick( &mut self, trigger: f32, attack_ms: f32, attack_shape: f32, decay_ms: f32, decay_shape: f32, ) -> (f32, f32)
Computes the next tick for this envelope. The inputs can be changed on each tick.
trigger
- Trigger input signal, will trigger like crate::Trigger.attack_ms
- The milliseconds for the attack stage.attack_shape
- The shape for the attack stage. Value in the range [[0.0, 1.0]]. 0.5 is linear. See also crate::sqrt4_to_pow4.decay_ms
- The milliseconds for the decay stage.decay_shape
- The shape for the decay stage. Value in the range [[0.0, 1.0]]. 0.5 is linear. See also crate::sqrt4_to_pow4.
Returned are two values:
- First the envelope value
- Second a trigger signal at the end of the envelope.
use synfx_dsp::EnvRetrigAD;
let mut env = EnvRetrigAD::new();
env.set_sample_rate(10.0); // Yes, 10 samples per second for testing here :-)
for _ in 0..2 {
env.tick(1.0, 500.0, 0.5, 500.0, 0.5);
}
let (value, _retrig) = env.tick(1.0, 500.0, 0.5, 500.0, 0.5);
assert!((value - 0.6).abs() < 0.0001);
for _ in 0..5 {
env.tick(1.0, 500.0, 0.5, 500.0, 0.5);
}
let (value, _retrig) = env.tick(1.0, 500.0, 0.5, 500.0, 0.5);
assert!((value - 0.2).abs() < 0.0001);
Trait Implementations§
Source§impl Clone for EnvRetrigAD
impl Clone for EnvRetrigAD
Source§fn clone(&self) -> EnvRetrigAD
fn clone(&self) -> EnvRetrigAD
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreAuto Trait Implementations§
impl Freeze for EnvRetrigAD
impl RefUnwindSafe for EnvRetrigAD
impl Send for EnvRetrigAD
impl Sync for EnvRetrigAD
impl Unpin for EnvRetrigAD
impl UnwindSafe for EnvRetrigAD
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more