47 lines
1.3 KiB
Rust
47 lines
1.3 KiB
Rust
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
|
|
}
|
|
}
|