PARALLEL SOUNDS LETS GOOOOOO
This commit is contained in:
@@ -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);
|
||||
|
||||
34
src/seq.rs
34
src/seq.rs
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user