diff --git a/src/main.rs b/src/main.rs index 91129ee..d2072c7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,17 +8,20 @@ mod seq; fn main() { let flags = flags::Flags::new(); - let mut syn = syn::Syn::new( + let mut syn_seq = seq::new_syn(syn::Syn::new( flags.debug, flags.sound_font, flags.sample_rate, - ); - syn.tone_on(0, tone::new("c+5")); + )); + syn_seq.append("c"); + syn_seq.append("2e"); + syn_seq.append("g"); + //syn.tone_on(0, tone::new("c+5")); - play(syn, flags.sample_rate, flags.bpm); + play(syn_seq, flags.sample_rate, flags.bpm); } -fn play(mut s: syn::Syn, sample_rate: usize, bpm: usize) { +fn play(mut s: seq::SynSeq, sample_rate: usize, bpm: usize) { let samples_per_beat = sample_rate / bpm * 60; let params = tinyaudio::prelude::OutputDeviceParameters { channels_count: 2, diff --git a/src/seq.rs b/src/seq.rs index 80a4692..337df94 100644 --- a/src/seq.rs +++ b/src/seq.rs @@ -1,8 +1,33 @@ use crate::tone; use crate::syn; +pub struct SynSeq { + seq: Seq, + syn: syn::Syn, +} + +pub fn new_syn(syn: syn::Syn) -> SynSeq { + SynSeq{ + seq: new(), + syn: syn, + } +} + +impl SynSeq { + pub fn append(&mut self, s: S) { + self.seq.append(s); + } + + pub fn render(&mut self, left: &mut [f32], right: &mut [f32]) { + if let Some(tone) = self.seq.pop() { + self.syn.tone_on(tone); + } + self.syn.render(left, right); + } +} + #[derive(PartialEq)] -struct Seq { +pub struct Seq { beats: Vec<(i32, tone::Tone)>, } diff --git a/src/syn.rs b/src/syn.rs index f2a180a..c7c3298 100644 --- a/src/syn.rs +++ b/src/syn.rs @@ -31,7 +31,8 @@ impl Syn { Syn::Real(synthesizer) } - pub fn tone_on(&mut self, a: i32, b: tone::Tone) { + pub fn tone_on(&mut self, b: tone::Tone) { + let a = 0 as i32; match self { // channel=[0..16) // velocity=[0..128) @@ -50,7 +51,8 @@ impl Syn { }; } - pub fn tone_off(&mut self, a: i32, b: tone::Tone) { + pub fn tone_off(&mut self, b: tone::Tone) { + let a = 0 as i32; match self { Syn::Real(syn) => syn.note_off(a, b.i32()), Syn::Text{m, ..} => { @@ -83,10 +85,10 @@ mod test { fn test_new_real() { let mut syn = Syn::new(false, "super_small_font.sf2".to_string(), 44100); - syn.tone_on(1, tone::new("c")); - syn.tone_on(2, tone::new("d")); + syn.tone_on(tone::new("c")); + syn.tone_on(tone::new("d")); - syn.tone_off(2, tone::new("d")); + syn.tone_off(tone::new("d")); let mut buffer1 = Vec::::new(); let mut buffer2 = Vec::::new(); @@ -97,10 +99,10 @@ mod test { fn test_text() { let mut syn = Syn::new(true, ".sf2".to_string(), 1); - syn.tone_on(1, tone::new("c")); - syn.tone_on(2, tone::new("d")); + syn.tone_on(tone::new("c")); + syn.tone_on(tone::new("d")); - syn.tone_off(2, tone::new("d")); + syn.tone_off(tone::new("d")); let mut buffer1 = Vec::::new(); let mut buffer2 = Vec::::new();