diff --git a/packages/desktopbridge/cyclistbridge.mjs b/packages/desktopbridge/cyclistbridge.mjs index 8fd6558f2..288fab435 100644 --- a/packages/desktopbridge/cyclistbridge.mjs +++ b/packages/desktopbridge/cyclistbridge.mjs @@ -27,6 +27,9 @@ export class CyclistBridge extends Cyclist { if (this.started !== started && started != null) { if (started) { + // the time delay in ms that seems to occur when starting the clock. Unsure if this is standard across all clients + const evaluationTime = 140; + // when start message comes from abelink, delay starting cyclist clock until the start of the next abelink phase this.start_timer = window.setTimeout(() => { // TODO: evaluate the code so if another source triggers the play there will not be an error @@ -34,7 +37,7 @@ export class CyclistBridge extends Cyclist { logger('[cyclist] start'); this.clock.start(); this.setStarted(true); - }, timestamp - Date.now()); + }, timestamp - Date.now() - evaluationTime); } else { this.stop(); } @@ -46,6 +49,7 @@ export class CyclistBridge extends Cyclist { if (!this.pattern) { throw new Error('Scheduler: no pattern set! call .setPattern first.'); } + let x = Date.now(); const linkmsg = { // TODO: change this to value of "main" clock cps cps: 0.5, @@ -53,7 +57,9 @@ export class CyclistBridge extends Cyclist { timestamp: Date.now(), phase: this.clock.getPhase(), }; - Invoke('sendabelinkmsg', { linkmsg }); + Invoke('sendabelinkmsg', { linkmsg }).then(() => { + logger(`${Date.now() - x}`); + }); } stop() { diff --git a/src-tauri/src/ablelinkbridge.rs b/src-tauri/src/ablelinkbridge.rs index 8e31ba937..18809b176 100644 --- a/src-tauri/src/ablelinkbridge.rs +++ b/src-tauri/src/ablelinkbridge.rs @@ -62,7 +62,7 @@ impl AbeLinkState { let internal_time_at_next_phase = self.session_state.time_at_beat(beat + (quantum - phase), quantum); let time_offset = Duration::from_micros((internal_time_at_next_phase - link_time_stamp) as u64); let current_unix_time = current_unix_time(); - let unix_time_at_next_phase = (current_unix_time + time_offset).as_millis() - 140; + let unix_time_at_next_phase = (current_unix_time + time_offset).as_millis(); return unix_time_at_next_phase as u64; } @@ -117,7 +117,7 @@ impl AbeLinkState { pub fn init(_logger: Logger, abelink: Arc>) { tauri::async_runtime::spawn(async move { let mut prev_is_started = false; - let mut prev_cps = 0.5; + let mut prev_cps = 0.0; let mut time_since_last_phase_send = 0; let sleep_time = 10; @@ -126,6 +126,7 @@ pub fn init(_logger: Logger, abelink: Arc>) { ........................................................................*/ loop { let mut state = abelink.lock().await; + state.capture_app_state(); if state.link.is_enabled() == false { state.link.enable(true); state.link.enable_start_stop_sync(true); @@ -133,8 +134,6 @@ pub fn init(_logger: Logger, abelink: Arc>) { let started = state.session_state.is_playing(); - state.capture_app_state(); - if started != prev_is_started { state.send_started(); prev_is_started = started; @@ -158,6 +157,7 @@ pub fn init(_logger: Logger, abelink: Arc>) { #[tauri::command] pub async fn sendabelinkmsg(linkmsg: LinkMsg, state: tauri::State<'_, AbeLinkStateContainer>) -> Result<(), String> { let mut abelink = state.abelink.lock().await; + abelink.capture_app_state(); let started = abelink.session_state.is_playing(); let time_stamp = abelink.link.clock_micros(); let quantum = abelink.quantum;