From d64f4b8af7adc70d3dcc859794ac9c09ebb26bf0 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Fri, 1 Nov 2024 00:21:37 +0200 Subject: [PATCH] fold Phrase::process_out into PhrasePlayer::process --- crates/tek_sequencer/src/sequencer_snd.rs | 47 +++++++++-------------- 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/crates/tek_sequencer/src/sequencer_snd.rs b/crates/tek_sequencer/src/sequencer_snd.rs index f71c867a..ac381694 100644 --- a/crates/tek_sequencer/src/sequencer_snd.rs +++ b/crates/tek_sequencer/src/sequencer_snd.rs @@ -19,12 +19,25 @@ impl Audio for PhrasePlayer { let has_midi_inputs = self.has_midi_inputs(); let quant = self.clock.quant(); if let Some((start_frame, phrase)) = self.playing_phrase() { + // Write chunk of phrase to output phrase.read().map(|phrase|{ if has_midi_outputs { - phrase.process_out( - &mut self.midi_out_buf, &mut self.notes_out.write().unwrap(), - &self.clock.timebase, (frame0.saturating_sub(start_frame), frames) - ); + let output = &mut self.midi_out_buf; + let notes_on = &mut self.notes_out.write().unwrap(); + let frame0 = frame0.saturating_sub(start_frame); + let mut buf = Vec::with_capacity(8); + let ticks = Ticks(self.clock.timebase.pulses_per_sample()); + for (time, tick) in ticks.between_samples(frame0, frame0 + frames) { + let tick = tick % phrase.length; + for message in phrase.notes[tick].iter() { + buf.clear(); + let channel = 0.into(); + let message = *message; + LiveEvent::Midi { channel, message }.write(&mut buf).unwrap(); + output[time as usize].push(buf.clone()); + update_keys(notes_on, &message); + } + } } }).unwrap(); let mut phrase = phrase.write().unwrap(); @@ -57,8 +70,8 @@ impl Audio for PhrasePlayer { } } else if has_midi_inputs && has_midi_outputs && self.monitoring { let mut notes_in = self.notes_in.write().unwrap(); + // Monitor each input for input in self.midi_inputs.iter() { - // Monitor each input for (frame, event, bytes) in parse_midi_input(input.iter(scope)) { if let LiveEvent::Midi { message, .. } = event { self.midi_out_buf[frame].push(bytes.to_vec()); @@ -96,30 +109,6 @@ impl PhrasePlayer { } } } -impl Phrase { - /// Write a chunk of MIDI events to an output port. - pub fn process_out ( - &self, - output: &mut PhraseChunk, - notes_on: &mut [bool;128], - timebase: &Timebase, - (frame0, frames): (usize, usize), - ) { - let mut buf = Vec::with_capacity(8); - let ticks = Ticks(timebase.pulses_per_sample()).between_samples(frame0, frame0 + frames); - for (time, tick) in ticks { - let tick = tick % self.length; - for message in self.notes[tick].iter() { - buf.clear(); - let channel = 0.into(); - let message = *message; - LiveEvent::Midi { channel, message }.write(&mut buf).unwrap(); - output[time as usize].push(buf.clone()); - update_keys(notes_on, &message); - } - } - } -} /// Add "all notes off" to the start of a buffer. pub fn all_notes_off (output: &mut PhraseChunk) { let mut buf = vec![];