PARALLEL SOUNDS LETS GOOOOOO

This commit is contained in:
2026-03-11 13:40:43 -06:00
parent acdac24d1a
commit 59c7386e85
2 changed files with 34 additions and 15 deletions

View File

@@ -13,8 +13,9 @@ fn main() {
flags.sound_font,
flags.sample_rate,
));
syn_seq.append(1, "3c1");
if let Some(play) = flags.play {
syn_seq.append(play);
syn_seq.append(0, play);
}
play(syn_seq, flags.sample_rate, flags.bpm);

View File

@@ -2,37 +2,55 @@ use crate::tone;
use crate::syn;
pub struct SynSeq {
seq: Seq,
seqs: std::collections::HashMap<i32, Seq>,
syn: syn::Syn,
}
pub fn new_syn(syn: syn::Syn) -> SynSeq {
SynSeq{
seq: new(),
seqs: std::collections::HashMap::new(),
syn: syn,
}
}
impl SynSeq {
pub fn append<S: ToString>(&mut self, s: S) {
self.seq.append(s);
pub fn append<S: ToString>(&mut self, ch: i32, s: S) {
match self.seqs.get_mut(&ch) {
Some(seq) => seq.append(s),
None => {
let mut seq = new();
seq.append(s);
self.seqs.insert(ch, seq);
},
};
}
pub fn render(&mut self, left: &mut [f32], right: &mut [f32]) {
match self.seq.pop() {
for (ch, seq) in self.seqs.iter_mut() {
let ch = ch.clone();
match seq.pop() {
(Some(tone), changed) if changed => {
self.syn.set(0, Some(tone.clone()));
self.syn.set(ch, Some(tone.clone()))
},
(None, changed) if changed => {
self.syn.set(0, None);
self.syn.set(ch, None);
},
_ => {},
};
}
self.syn.render(left, right);
}
pub fn beats(&self) -> usize {
self.seq.beats.len()
let mut longest = 0 as usize;
for (_, seq) in self.seqs.iter() {
longest = if seq.beats.len() > longest {
seq.beats.len()
} else {
longest
};
}
longest
}
}