use crate::*; impl Audio for TransportToolbar { fn process (&mut self, _: &Client, scope: &ProcessScope) -> Control { let times = scope.cycle_times().unwrap(); let CycleTimes { current_frames, current_usecs, next_usecs: _, period_usecs: _ } = times; let _chunk_size = scope.n_frames() as usize; let transport = self.transport.as_ref().unwrap().query().unwrap(); self.clock.set_sample(transport.pos.frame() as usize); if *self.clock.playing.read().unwrap() != Some(transport.state) { self.started = match transport.state { TransportState::Rolling => Some((current_frames as usize, current_usecs as usize)), TransportState::Stopped => None, _ => self.started } }; *self.clock.playing.write().unwrap() = Some(transport.state); if *self.clock.playing.read().unwrap() == Some(TransportState::Stopped) { self.started = None; } match self.started { Some((_, usecs)) => { let usec = current_usecs as usize - usecs; let pulse = self.clock.usecs_to_pulse(usec as f64); self.clock.set_usec(usec); self.clock.set_pulse(pulse as usize); }, None => { self.clock.set_usec(0); } }; Control::Continue } }