use super::*; /// A currently playing instance of a sample. pub struct Voice { pub sample: Arc>, pub after: usize, pub position: usize, pub velocity: f32, } impl Iterator for Voice { type Item = [f32;2]; fn next (&mut self) -> Option { if self.after > 0 { self.after = self.after - 1; return Some([0.0, 0.0]) } let sample = self.sample.read().unwrap(); if self.position < sample.end { let position = self.position; self.position = self.position + 1; return sample.channels[0].get(position).map(|_amplitude|[ sample.channels[0][position] * self.velocity, sample.channels[0][position] * self.velocity, ]) } None } }