use super::event;
use super::AudioBufferMut;
pub enum EventOrAudio<'c, 'a: 'c> {
Event(event::Event),
Audio(AudioBufferMut<'c, 'a>),
}
pub fn run_split_at_events<I, F>(mut audio: AudioBufferMut, events: I, mut f: F)
where
I: Iterator<Item = event::Event>,
F: FnMut(EventOrAudio),
{
let buffer_len = audio.len();
let mut curr_slice_start: usize = 0;
for ev in events {
if ev.time <= curr_slice_start as i64 {
f(EventOrAudio::Event(ev));
continue;
}
let time = ev.time as usize;
assert!(time < buffer_len);
let mut sb = audio.slice(curr_slice_start..time);
f(EventOrAudio::Audio((&mut sb).into()));
curr_slice_start = time;
f(EventOrAudio::Event(ev));
}
let mut sb = audio.slice(curr_slice_start..buffer_len);
f(EventOrAudio::Audio((&mut sb).into()));
}