From b2095c42299b630f8d346d4126e3da6dafa89a78 Mon Sep 17 00:00:00 2001 From: breel Date: Wed, 11 Mar 2026 12:58:02 -0600 Subject: [PATCH] IT IS MUSIC --- src/main.rs | 4 +++- src/seq.rs | 6 +++++- src/syn.rs | 21 +++++++++++++++++---- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/main.rs b/src/main.rs index d2072c7..d49a2d1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,6 +28,8 @@ fn play(mut s: seq::SynSeq, sample_rate: usize, bpm: usize) { sample_rate: sample_rate, channel_sample_count: samples_per_beat, }; + let beats = s.beats(); + let duration = 1 + 60 * beats / bpm; let sample_count = (params.channel_sample_count) as usize; let mut left: Vec = vec![0_f32; sample_count]; @@ -44,5 +46,5 @@ fn play(mut s: seq::SynSeq, sample_rate: usize, bpm: usize) { .unwrap(); // Wait it out - std::thread::sleep(std::time::Duration::from_secs(2)); + std::thread::sleep(std::time::Duration::from_secs(duration as u64)); } diff --git a/src/seq.rs b/src/seq.rs index 337df94..3fb393b 100644 --- a/src/seq.rs +++ b/src/seq.rs @@ -20,10 +20,14 @@ impl SynSeq { 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.set(tone); } self.syn.render(left, right); } + + pub fn beats(&self) -> usize { + self.seq.beats.len() + } } #[derive(PartialEq)] diff --git a/src/syn.rs b/src/syn.rs index c7c3298..96d6044 100644 --- a/src/syn.rs +++ b/src/syn.rs @@ -31,14 +31,28 @@ impl Syn { Syn::Real(synthesizer) } - pub fn tone_on(&mut self, b: tone::Tone) { + pub fn set(&mut self, b: tone::Tone) { + let a = 0 as i32; + match self { + // channel=[0..16) + // velocity=[0..128) + Syn::Real(syn) => { + syn.note_off_all_channel(a, false); + }, + Syn::Text{m, ..} => { + m.clear(); + }, + }; + self.tone_on(b); + } + + fn tone_on(&mut self, b: tone::Tone) { let a = 0 as i32; match self { // channel=[0..16) // velocity=[0..128) Syn::Real(syn) => syn.note_on(a, b.i32(), 127), Syn::Text{m, ..} => { - eprintln!("tone_on({:?}, {:?}, {:?})", a, b.i32(), 127); match m.get_mut(&a) { Some(m2) => { m2.insert(b.i32(), 127); }, None => { @@ -51,12 +65,11 @@ impl Syn { }; } - pub fn tone_off(&mut self, b: tone::Tone) { + 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, ..} => { - eprintln!("tone_off({:?}, {:?})", a, b.i32()); match m.get_mut(&a) { Some(m) => { m.remove(&b.i32()); }, None => {},