play stop working

This commit is contained in:
Jade Rowland
2023-09-22 14:27:03 -04:00
parent db36636ab2
commit d7fe491c84
2 changed files with 28 additions and 14 deletions
+20 -11
View File
@@ -28,15 +28,16 @@ impl AbeLinkToJs {
pub struct AsyncInputTransmit {
pub inner: Mutex<mpsc::Sender<LinkMsg>>,
pub abelink: Arc<Mutex<AbeLinkState>>,
}
pub struct State {
pub struct AbeLinkState {
pub link: AblLink,
pub session_state: SessionState,
pub running: bool,
pub quantum: f64,
}
impl State {
impl AbeLinkState {
pub fn new() -> Self {
Self {
link: AblLink::new(120.0),
@@ -58,6 +59,7 @@ impl State {
pub fn init(
_logger: Logger,
abelink_to_js: AbeLinkToJs,
abelink: Arc<Mutex<AbeLinkState>>,
async_input_receiver: mpsc::Receiver<LinkMsg>,
mut async_output_receiver: mpsc::Receiver<LinkMsg>,
async_output_transmitter: mpsc::Sender<LinkMsg>
@@ -82,24 +84,28 @@ pub fn init(
/* ...........................................................
Initialize Ableton link
............................................................*/
let mut state = State::new();
state.link.enable(true);
state.link.enable_start_stop_sync(true);
//let mut state = AbeLinkState::new();
let mut prev_is_playing = state.session_state.is_playing();
let mut prev_bpm = state.session_state.tempo();
let mut prev_is_playing = false;
let mut prev_bpm = 120.0;
/* ...........................................................
Process queued messages
............................................................*/
loop {
let mut message_queue = message_queue_clone.lock().await;
let mut state = abelink.lock().await;
if state.link.is_enabled() == false {
state.link.enable(true);
state.link.enable_start_stop_sync(true);
}
state.capture_app_state();
let mut message_queue = message_queue_clone.lock().await;
let time_stamp = state.link.clock_micros();
let bpm = state.session_state.tempo();
let play = state.session_state.is_playing();
let quantum = state.quantum;
state.capture_app_state();
if bpm != prev_bpm || play != prev_is_playing {
//let cycle = state.session_state.time_at_beat(beat, quantum)
@@ -119,13 +125,13 @@ pub fn init(
if is_playing == false {
state.session_state.set_is_playing(false, time_stamp as u64);
} else {
state.session_state.set_is_playing_and_request_beat_at_time(true, time_stamp as u64, 0.0, state.quantum);
state.session_state.set_is_playing_and_request_beat_at_time(true, time_stamp as u64, 0.0, quantum);
}
state.commit_app_state();
}
return false;
});
drop(state);
sleep(Duration::from_millis(10));
}
});
@@ -147,5 +153,8 @@ pub async fn async_process_model(
pub async fn sendabelinkmsg(linkmsg: LinkMsg, state: tauri::State<'_, AsyncInputTransmit>) -> Result<(), String> {
println!("bpm {} play {}", linkmsg.bpm, linkmsg.play);
let async_proc_input_tx = state.inner.lock().await;
// let abelink = state.abelink.lock().await;
// drop(abelink);
async_proc_input_tx.send(linkmsg).await.map_err(|e| e.to_string())
}
+8 -3
View File
@@ -7,6 +7,7 @@ mod loggerbridge;
mod ablelinkbridge;
use std::sync::Arc;
use ablelinkbridge::AbeLinkState;
use ablelinkbridge::AbeLinkToJs;
use loggerbridge::Logger;
use tauri::Manager;
@@ -33,14 +34,17 @@ fn main() {
.manage(oscbridge::AsyncInputTransmit {
inner: Mutex::new(async_input_transmitter_osc),
})
.manage(ablelinkbridge::AsyncInputTransmit {
inner: Mutex::new(async_input_transmitter_abelink),
})
.invoke_handler(tauri::generate_handler![midibridge::sendmidi, oscbridge::sendosc, ablelinkbridge::sendabelinkmsg])
.setup(|app| {
let window = Arc::new(app.get_window("main").unwrap());
let logger = Logger { window: window.clone() };
let abelink = Arc::new(Mutex::new(AbeLinkState::new()));
app.manage(ablelinkbridge::AsyncInputTransmit {
inner: Mutex::new(async_input_transmitter_abelink),
abelink: abelink.clone(),
});
midibridge::init(
logger.clone(),
async_input_receiver_midi,
@@ -57,6 +61,7 @@ fn main() {
ablelinkbridge::init(
logger.clone(),
AbeLinkToJs { window },
abelink,
async_input_receiver_abelink,
async_output_receiver_abelink,
async_output_transmitter_abelink