From 76e74cba8b8d16f14d08516d7226b79b70897a7b Mon Sep 17 00:00:00 2001 From: breel Date: Tue, 10 Mar 2026 10:31:55 -0600 Subject: [PATCH] notes --- src/main.rs | 52 ++++++++++++++++++++++++---------------------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/src/main.rs b/src/main.rs index 32efe54..d65194a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,4 @@ use itertools::Itertools; -use rustysynth::MidiFile; -use rustysynth::MidiFileSequencer; use rustysynth::SoundFont; use rustysynth::Synthesizer; use rustysynth::SynthesizerSettings; @@ -9,43 +7,41 @@ use std::sync::Arc; use tinyaudio::prelude::*; fn main() { - // Load the SoundFont. - let mut sf2 = File::open("FatBoy.sf2").unwrap(); - let sound_font = Arc::new(SoundFont::new(&mut sf2).unwrap()); + // Load the SoundFont. + let mut sf2 = File::open("FatBoy.sf2").unwrap(); + let sound_font = Arc::new(SoundFont::new(&mut sf2).unwrap()); - // Setup the audio output. - let params = OutputDeviceParameters { - channels_count: 2, - sample_rate: 44100, - channel_sample_count: 4410, - }; + // Setup the audio output. + let params = OutputDeviceParameters { + channels_count: 2, + sample_rate: 44100, + channel_sample_count: 4410, + }; // Create the synthesizer. let settings = SynthesizerSettings::new(params.sample_rate as i32); let mut synthesizer = Synthesizer::new(&sound_font, &settings).unwrap(); - // Play some notes (middle C, E, G). - synthesizer.note_on(0, 60, 100); + // Play some notes (middle C, E, G). // 16 channels actually // 60=c 64=e 67=g //up to 128velocity though dont go below 50 tbh synthesizer.note_on(0, 64, 100); - synthesizer.note_on(0, 67, 100); + //synthesizer.render(&mut left[..], &mut right[..]); // puts in a state of rendering the first loop of these notes - // The output buffer + // The recycled output buffer per-loop, could be in lamba but that'd be wasteful let sample_count = (params.channel_sample_count) as usize; let mut left: Vec = vec![0_f32; sample_count]; let mut right: Vec = vec![0_f32; sample_count]; + // Start the audio output. Executes channel_sample_count per loop, sample_rate/channel_sample_count per second forever. + let _device = run_output_device(params, { + move |data| { + synthesizer.render(&mut left[..], &mut right[..]); // put in a state of rendering the next loop of these notes + for (i, value) in left.iter().interleave(right.iter()).enumerate() { + data[i] = *value; + } + } + }) + .unwrap(); - // Start the audio output. - let _device = run_output_device(params, { - move |data| { - synthesizer.render(&mut left[..], &mut right[..]); - for (i, value) in left.iter().interleave(right.iter()).enumerate() { - data[i] = *value; - } - } - }) - .unwrap(); - - // Wait for 10 seconds. - std::thread::sleep(std::time::Duration::from_secs(10)); + // Let it ride + std::thread::sleep(std::time::Duration::from_secs(1)); }