Files
doux-copy/seq/src/link.rs
2026-01-19 14:42:14 +01:00

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
}
}