edit pt.2; enqueue; fix zero divisions

This commit is contained in:
🪞👃🪞 2024-11-26 15:22:24 +01:00
parent c93081d061
commit d1fdc7f8b6
3 changed files with 72 additions and 61 deletions

View file

@ -199,22 +199,25 @@ pub trait MidiOutputApi: ClockApi + HasPhrase {
if let Some(ref phrase) = phrase {
// Source phrase from which the MIDI events will be taken.
let phrase = phrase.read().unwrap();
// Current pulse index in source phrase
let pulse = pulse % phrase.length;
// Output each MIDI event from phrase at appropriate frames of output buffer:
for message in phrase.notes[pulse].iter() {
// Clear output buffer for this MIDI event.
note_buffer.clear();
// TODO: support MIDI channels other than CH1.
let channel = 0.into();
// Serialize MIDI event into message buffer.
LiveEvent::Midi { channel, message: *message }
.write(note_buffer)
.unwrap();
// Append serialized message to output buffer.
output_buffer[sample].push(note_buffer.clone());
// Update the list of currently held notes.
update_keys(&mut*notes, &message);
// Phrase with zero length is not processed
if phrase.length > 0 {
// Current pulse index in source phrase
let pulse = pulse % phrase.length;
// Output each MIDI event from phrase at appropriate frames of output buffer:
for message in phrase.notes[pulse].iter() {
// Clear output buffer for this MIDI event.
note_buffer.clear();
// TODO: support MIDI channels other than CH1.
let channel = 0.into();
// Serialize MIDI event into message buffer.
LiveEvent::Midi { channel, message: *message }
.write(note_buffer)
.unwrap();
// Append serialized message to output buffer.
output_buffer[sample].push(note_buffer.clone());
// Update the list of currently held notes.
update_keys(&mut*notes, &message);
}
}
}
}