use crate::rust_bindings::*;
pub struct SessionState {
pub(crate) session_state: abl_link_session_state,
}
unsafe impl Send for SessionState {}
impl Drop for SessionState {
fn drop(&mut self) {
unsafe { abl_link_destroy_session_state(self.session_state) }
}
}
impl Default for SessionState {
fn default() -> Self {
Self::new()
}
}
impl SessionState {
pub fn new() -> SessionState {
unsafe {
SessionState {
session_state: abl_link_create_session_state(),
}
}
}
pub fn tempo(&self) -> f64 {
unsafe { abl_link_tempo(self.session_state) }
}
pub fn set_tempo(&mut self, bpm: f64, at_time: i64) {
unsafe { abl_link_set_tempo(self.session_state, bpm, at_time) }
}
pub fn beat_at_time(&self, time: i64, quantum: f64) -> f64 {
unsafe { abl_link_beat_at_time(self.session_state, time, quantum) }
}
pub fn phase_at_time(&self, time: i64, quantum: f64) -> f64 {
unsafe { abl_link_phase_at_time(self.session_state, time, quantum) }
}
pub fn time_at_beat(&self, beat: f64, quantum: f64) -> i64 {
unsafe { abl_link_time_at_beat(self.session_state, beat, quantum) }
}
pub fn request_beat_at_time(&mut self, beat: f64, time: i64, quantum: f64) {
unsafe { abl_link_request_beat_at_time(self.session_state, beat, time, quantum) }
}
pub fn force_beat_at_time(&mut self, beat: f64, time: i64, quantum: f64) {
unsafe { abl_link_force_beat_at_time(self.session_state, beat, time, quantum) }
}
pub fn set_is_playing(&mut self, is_playing: bool, time: i64) {
unsafe { abl_link_set_is_playing(self.session_state, is_playing, time) }
}
pub fn is_playing(&self) -> bool {
unsafe { abl_link_is_playing(self.session_state) }
}
pub fn time_for_is_playing(&self) -> i64 {
unsafe { abl_link_time_for_is_playing(self.session_state) }
}
pub fn request_beat_at_start_playing_time(&mut self, beat: f64, quantum: f64) {
unsafe { abl_link_request_beat_at_start_playing_time(self.session_state, beat, quantum) }
}
pub fn set_is_playing_and_request_beat_at_time(
&mut self,
is_playing: bool,
time: i64,
beat: f64,
quantum: f64,
) {
unsafe {
abl_link_set_is_playing_and_request_beat_at_time(
self.session_state,
is_playing,
time,
beat,
quantum,
)
}
}
}