diff --git a/crates/tek_core/src/time.rs b/crates/tek_core/src/time.rs index f92730b8..d26fb0b9 100644 --- a/crates/tek_core/src/time.rs +++ b/crates/tek_core/src/time.rs @@ -256,35 +256,19 @@ impl PulsesPerQuaver for Instant { } impl SamplePosition for Instant { #[inline] fn sample (&self) -> usize { self.sample.load(Ordering::Relaxed) } - #[inline] fn set_sample (&self, sample: usize) { - self.sample.store(sample, Ordering::Relaxed); - self.set_usec(self.timebase.samples_to_usec(sample as f64) as usize); - self.set_pulse(self.timebase.samples_to_pulse(sample as f64)); - } + #[inline] fn set_sample (&self, s: usize) { self.sample.store(s, Ordering::Relaxed); } } impl UsecPosition for Instant { #[inline] fn usec (&self) -> usize { self.usec.load(Ordering::Relaxed) } - #[inline] fn set_usec (&self, usec: usize) { - self.usec.store(usec, Ordering::Relaxed); - self.set_pulse(self.timebase.usecs_to_pulse(usec as f64)); - // FIXME: segfault!?! - //self.set_sample(self.timebase.usecs_to_sample(usec as f64) as usize); - } + #[inline] fn set_usec (&self, u: usize) { self.usec.store(u, Ordering::Relaxed); } } impl PulsePosition for Instant { #[inline] fn pulse (&self) -> f64 { self.pulse.load(Ordering::Relaxed) } - #[inline] fn set_pulse (&self, pulse: f64) { - self.pulse.store(pulse, Ordering::Relaxed); - // FIXME: segfault!?! - //self.set_usec(self.timebase.pulses_to_usec(pulse) as usize); - //self.set_sample(self.timebase.pulses_to_sample(pulse) as usize); - } + #[inline] fn set_pulse (&self, p: f64) { self.pulse.store(p, Ordering::Relaxed); } } impl PulsePosition for Instant { #[inline] fn pulse (&self) -> usize { self.pulse.load(Ordering::Relaxed) as usize } - #[inline] fn set_pulse (&self, pulse: usize) { - PulsePosition::::set_pulse(self, pulse as f64) - } + #[inline] fn set_pulse (&self, p: usize) { PulsePosition::::set_pulse(self, p as f64) } } impl Instant { pub fn from_usec (timebase: &Arc, usec: usize) -> Self { @@ -295,6 +279,11 @@ impl Instant { timebase: timebase.clone(), } } + pub fn update_from_usec (&self, usec: usize) { + self.set_usec(usec); + self.set_pulse(self.timebase.usecs_to_pulse(usec as f64)); + self.set_sample(self.timebase.usecs_to_sample(usec as f64) as usize); + } pub fn from_sample (timebase: &Arc, sample: usize) -> Self { Self { sample: sample.into(), @@ -303,6 +292,11 @@ impl Instant { timebase: timebase.clone(), } } + pub fn update_from_sample (&self, sample: usize) { + self.set_sample(sample); + self.set_usec(self.timebase.samples_to_usec(sample as f64) as usize); + self.set_pulse(self.timebase.samples_to_pulse(sample as f64)); + } pub fn from_pulse (timebase: &Arc, pulse: f64) -> Self { Self { pulse: pulse.into(), @@ -311,6 +305,11 @@ impl Instant { timebase: timebase.clone(), } } + pub fn update_from_pulse (&self, pulse: f64) { + self.set_pulse(pulse); + self.set_usec(self.timebase.pulses_to_usec(pulse) as usize); + self.set_sample(self.timebase.pulses_to_sample(pulse) as usize); + } } /// (pulses, name), assuming 96 PPQ