mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 11:46:41 +01:00
re-enabled space = play! but not pause
This commit is contained in:
parent
0fb7655b53
commit
0ce0a07713
6 changed files with 110 additions and 41 deletions
|
|
@ -1,11 +1,13 @@
|
|||
use crate::*;
|
||||
pub trait HasClock: Send + Sync {
|
||||
fn clock (&self) -> &Clock;
|
||||
fn clock_mut (&mut self) -> &mut Clock;
|
||||
}
|
||||
#[macro_export] macro_rules! has_clock {
|
||||
(|$self:ident:$Struct:ident$(<$($L:lifetime),*$($T:ident$(:$U:path)?),*>)?|$cb:expr) => {
|
||||
impl $(<$($L),*$($T $(: $U)?),*>)? HasClock for $Struct $(<$($L),*$($T),*>)? {
|
||||
fn clock (&$self) -> &Clock { $cb }
|
||||
fn clock (&$self) -> &Clock { &$cb }
|
||||
fn clock_mut (&mut $self) -> &mut Clock { &mut $cb }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -20,23 +22,35 @@ pub enum ClockCommand {
|
|||
SetQuant(f64),
|
||||
SetSync(f64),
|
||||
}
|
||||
impl<T: HasClock> EdnCommand<T> for ClockCommand {
|
||||
fn from_edn <'a> (state: &T, head: &EdnItem<&str>, tail: &'a [EdnItem<&str>]) -> Option<Self> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
edn_provide!(# u32: |self: Clock| {});
|
||||
edn_provide!(f64: |self: Clock| {});
|
||||
edn_command!(ClockCommand: |state: Clock| {
|
||||
("play" [t: u32] Self::Play(t))
|
||||
("pause" [t: u32] Self::Pause(t))
|
||||
("seek/usec" [t: f64] Self::SeekUsec(t.expect("no usec")))
|
||||
("seek/pulse" [t: f64] Self::SeekPulse(t.expect("no pulse")))
|
||||
("seek/sample" [t: f64] Self::SeekSample(t.expect("no sample")))
|
||||
("set/bpm" [t: f64] Self::SetBpm(t.expect("no bpm")))
|
||||
("set/sync" [t: f64] Self::SetSync(t.expect("no sync")))
|
||||
("set/quant" [t: f64] Self::SetQuant(t.expect("no quant")))
|
||||
});
|
||||
impl<T: HasClock> Command<T> for ClockCommand {
|
||||
fn execute (self, state: &mut T) -> Perhaps<Self> {
|
||||
self.execute(state.clock_mut())
|
||||
}
|
||||
}
|
||||
impl Command<Clock> for ClockCommand {
|
||||
fn execute (self, state: &mut Clock) -> Perhaps<Self> {
|
||||
use ClockCommand::*;
|
||||
match self {
|
||||
Play(start) => state.clock().play_from(start)?,
|
||||
Pause(pause) => state.clock().pause_at(pause)?,
|
||||
SeekUsec(usec) => state.clock().playhead.update_from_usec(usec),
|
||||
SeekSample(sample) => state.clock().playhead.update_from_sample(sample),
|
||||
SeekPulse(pulse) => state.clock().playhead.update_from_pulse(pulse),
|
||||
SetBpm(bpm) => return Ok(Some(SetBpm(state.clock().timebase().bpm.set(bpm)))),
|
||||
SetQuant(quant) => return Ok(Some(SetQuant(state.clock().quant.set(quant)))),
|
||||
SetSync(sync) => return Ok(Some(SetSync(state.clock().sync.set(sync)))),
|
||||
Play(start) => state.play_from(start)?,
|
||||
Pause(pause) => state.pause_at(pause)?,
|
||||
SeekUsec(usec) => state.playhead.update_from_usec(usec),
|
||||
SeekSample(sample) => state.playhead.update_from_sample(sample),
|
||||
SeekPulse(pulse) => state.playhead.update_from_pulse(pulse),
|
||||
SetBpm(bpm) => return Ok(Some(SetBpm(state.timebase().bpm.set(bpm)))),
|
||||
SetQuant(quant) => return Ok(Some(SetQuant(state.quant.set(quant)))),
|
||||
SetSync(sync) => return Ok(Some(SetSync(state.sync.set(sync)))),
|
||||
};
|
||||
Ok(None)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue