use super::Engine;
impl Engine {
pub(super) fn advance_midi_dmx_playbacks(&self) {
let song_time = match self.get_song_time().checked_sub(self.playback_delay) {
Some(t) => t,
None => return, };
let mut playbacks = self.midi_dmx_playbacks.lock();
for playback in playbacks.iter_mut() {
let events = playback.precomputed.events();
while playback.cursor < events.len() && events[playback.cursor].time <= song_time {
let event = &events[playback.cursor];
if playback.midi_channels.is_empty()
|| playback.midi_channels.contains(&event.channel)
{
self.handle_midi_event_by_id(playback.universe_id, event.message);
}
playback.cursor += 1;
}
}
}
pub(super) fn midi_dmx_playbacks_finished(&self) -> bool {
let playbacks = self.midi_dmx_playbacks.lock();
playbacks.iter().all(|p| p.cursor >= p.precomputed.len())
}
}