PARALLEL SOUNDS LETS GOOOOOO
This commit is contained in:
@@ -13,8 +13,9 @@ fn main() {
|
|||||||
flags.sound_font,
|
flags.sound_font,
|
||||||
flags.sample_rate,
|
flags.sample_rate,
|
||||||
));
|
));
|
||||||
|
syn_seq.append(1, "3c1");
|
||||||
if let Some(play) = flags.play {
|
if let Some(play) = flags.play {
|
||||||
syn_seq.append(play);
|
syn_seq.append(0, play);
|
||||||
}
|
}
|
||||||
|
|
||||||
play(syn_seq, flags.sample_rate, flags.bpm);
|
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;
|
use crate::syn;
|
||||||
|
|
||||||
pub struct SynSeq {
|
pub struct SynSeq {
|
||||||
seq: Seq,
|
seqs: std::collections::HashMap<i32, Seq>,
|
||||||
syn: syn::Syn,
|
syn: syn::Syn,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_syn(syn: syn::Syn) -> SynSeq {
|
pub fn new_syn(syn: syn::Syn) -> SynSeq {
|
||||||
SynSeq{
|
SynSeq{
|
||||||
seq: new(),
|
seqs: std::collections::HashMap::new(),
|
||||||
syn: syn,
|
syn: syn,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SynSeq {
|
impl SynSeq {
|
||||||
pub fn append<S: ToString>(&mut self, s: S) {
|
pub fn append<S: ToString>(&mut self, ch: i32, s: S) {
|
||||||
self.seq.append(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]) {
|
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 => {
|
(Some(tone), changed) if changed => {
|
||||||
self.syn.set(0, Some(tone.clone()));
|
self.syn.set(ch, Some(tone.clone()))
|
||||||
},
|
},
|
||||||
(None, changed) if changed => {
|
(None, changed) if changed => {
|
||||||
self.syn.set(0, None);
|
self.syn.set(ch, None);
|
||||||
},
|
},
|
||||||
_ => {},
|
_ => {},
|
||||||
};
|
};
|
||||||
|
}
|
||||||
self.syn.render(left, right);
|
self.syn.render(left, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn beats(&self) -> usize {
|
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