mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
31 lines
1.4 KiB
Rust
31 lines
1.4 KiB
Rust
use crate::*;
|
|
impl<E: Engine> Audio for TransportToolbar<E> {
|
|
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
|
|
}
|
|
}
|