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