diff --git a/src/seq.rs b/src/seq.rs index 3fb393b..6edd3e2 100644 --- a/src/seq.rs +++ b/src/seq.rs @@ -4,12 +4,14 @@ use crate::syn; pub struct SynSeq { seq: Seq, syn: syn::Syn, + state: Option, } pub fn new_syn(syn: syn::Syn) -> SynSeq { SynSeq{ seq: new(), syn: syn, + state: None, } } @@ -19,9 +21,15 @@ impl SynSeq { } pub fn render(&mut self, left: &mut [f32], right: &mut [f32]) { - if let Some(tone) = self.seq.pop() { - self.syn.set(tone); - } + let state = self.state.clone(); + match self.seq.pop() { + Some(tone) if (state.is_none() || tone != state.unwrap()) => { + self.syn.set(tone.clone()); + self.state = Some(tone); + }, + None => { self.state = None; }, + _ => {}, + }; self.syn.render(left, right); }