Compare commits

..

2 Commits

Author SHA1 Message Date
Bel LaPointe
8cbbb9b3ec can play the same note repeatedly 2026-03-11 17:29:08 -06:00
Bel LaPointe
208d804f8f can repeat a note 2026-03-11 16:19:46 -06:00

View File

@@ -55,7 +55,8 @@ impl SynSeq {
#[derive(PartialEq)]
pub struct Seq {
beats: Vec<(usize, tone::Tone)>,
state: Option<tone::Tone>,
had_more: bool,
eof: bool,
}
fn new() -> Seq {
@@ -66,7 +67,8 @@ impl Seq {
fn new() -> Seq {
Seq {
beats: vec![],
state: None,
had_more: false,
eof: false,
}
}
@@ -79,12 +81,22 @@ impl Seq {
}
fn pop(&mut self) -> (Option<tone::Tone>, bool) {
let state_before = self.state.clone();
let tone_after = self._pop();
if state_before != tone_after {
self.state = tone_after.clone();
let mut changed = !self.had_more && self.beats.len() > 0;
self.had_more = match self.beats.len() {
0 => false,
_ => self.beats[0].0 > 1,
};
let eof_before = self.eof;
self.eof = self.beats.len() == 0;
if !eof_before && self.eof {
changed = true;
}
(tone_after, self.state != state_before)
let tone = self._pop();
eprintln!(
" popped ({:?}, {}): had_more={}, beats={:?} eof={} from {}",
tone, changed, self.had_more, self.beats, self.eof, eof_before,
);
(tone, changed)
}
fn _pop(&mut self) -> Option<tone::Tone> {
@@ -130,20 +142,22 @@ mod test {
fn test_seq() {
let mut seq = new();
seq.append("c");
seq.append("c c");
seq.append("4d");
seq.append("2-");
seq.append("g 2e");
assert_eq!(seq.beats.len(), 5);
assert_eq!(seq.len(), 10);
assert_eq!(seq.beats.len(), 6);
assert_eq!(seq.len(), 11);
assert_eq!(seq.beats[0], (1 as usize, tone::new("c")));
assert_eq!(seq.beats[1], (4 as usize, tone::new("d")));
assert_eq!(seq.beats[2], (2 as usize, tone::new("!")));
assert_eq!(seq.beats[3], (1 as usize, tone::new("g")));
assert_eq!(seq.beats[4], (2 as usize, tone::new("e")));
assert_eq!(seq.beats[1], (1 as usize, tone::new("c")));
assert_eq!(seq.beats[2], (4 as usize, tone::new("d")));
assert_eq!(seq.beats[3], (2 as usize, tone::new("!")));
assert_eq!(seq.beats[4], (1 as usize, tone::new("g")));
assert_eq!(seq.beats[5], (2 as usize, tone::new("e")));
assert_eq!(seq.pop(), (Some(tone::new("c")), true));
assert_eq!(seq.pop(), (Some(tone::new("c")), true));
assert_eq!(seq.pop(), (Some(tone::new("d")), true));
for _ in 1..4 {
@@ -154,7 +168,7 @@ mod test {
assert_eq!(seq.pop(), (Some(tone::new("g")), true));
assert_eq!(seq.pop(), (Some(tone::new("e")), true));
assert_eq!(seq.pop(), (Some(tone::new("e")), false));
assert_eq!(seq.pop(), (None, true));
assert_eq!(seq.pop(), (None, false));
assert_eq!(seq.pop(), (None, true), "shouldve newly had no more");
assert_eq!(seq.pop(), (None, false), "shouldve still had no more");
}
}