seq
This commit is contained in:
46
seq/src/link.rs
Normal file
46
seq/src/link.rs
Normal file
@@ -0,0 +1,46 @@
|
||||
use rusty_link::{AblLink, SessionState};
|
||||
|
||||
pub struct LinkState {
|
||||
link: AblLink,
|
||||
quantum: f64,
|
||||
}
|
||||
|
||||
impl LinkState {
|
||||
pub fn new(tempo: f64, quantum: f64) -> Self {
|
||||
let link = AblLink::new(tempo);
|
||||
Self { link, quantum }
|
||||
}
|
||||
|
||||
pub fn enable(&self) {
|
||||
self.link.enable(true);
|
||||
}
|
||||
|
||||
pub fn clock_micros(&self) -> i64 {
|
||||
self.link.clock_micros()
|
||||
}
|
||||
|
||||
pub fn query(&self) -> (f64, f64, f64, u64) {
|
||||
let mut state = SessionState::new();
|
||||
self.link.capture_app_session_state(&mut state);
|
||||
let time = self.link.clock_micros();
|
||||
let tempo = state.tempo();
|
||||
let beat = state.beat_at_time(time, self.quantum);
|
||||
let phase = state.phase_at_time(time, self.quantum);
|
||||
let peers = self.link.num_peers();
|
||||
(tempo, beat, phase, peers)
|
||||
}
|
||||
|
||||
pub fn set_tempo(&self, tempo: f64) {
|
||||
let mut state = SessionState::new();
|
||||
self.link.capture_app_session_state(&mut state);
|
||||
let time = self.link.clock_micros();
|
||||
state.set_tempo(tempo, time);
|
||||
self.link.commit_app_session_state(&state);
|
||||
}
|
||||
|
||||
pub fn capture_audio_state(&self) -> SessionState {
|
||||
let mut state = SessionState::new();
|
||||
self.link.capture_audio_session_state(&mut state);
|
||||
state
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user