From d5c6cb85ea4a8bc45d00c6312c8a5f4906d25dad Mon Sep 17 00:00:00 2001 From: Jade Rowland Date: Sat, 30 Sep 2023 22:18:31 -0400 Subject: [PATCH] use cps instead of bpm --- packages/desktopbridge/cyclistbridge.mjs | 14 ++++++------ src-tauri/src/ablelinkbridge.rs | 29 ++++++++++++++++-------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/packages/desktopbridge/cyclistbridge.mjs b/packages/desktopbridge/cyclistbridge.mjs index 9bcf32cd6..c2017dd49 100644 --- a/packages/desktopbridge/cyclistbridge.mjs +++ b/packages/desktopbridge/cyclistbridge.mjs @@ -13,12 +13,12 @@ export class CyclistBridge extends Cyclist { if (payload == null) { return; } - const { play, bpm, timestamp } = payload; + const { started, cps, timestamp } = payload; // (if bpm !== prev_bpm) { //update the clock // } - if (this.started !== play && play != null) { - if (play) { + if (this.started !== started && started != null) { + if (started) { this.start_timer = window.setTimeout(() => { logger('[cyclist] start'); this.clock.start(); @@ -39,8 +39,8 @@ export class CyclistBridge extends Cyclist { } const linkmsg = { - bpm: 110, - play: true, + cps: 0.5, + started: true, timestamp: Date.now(), }; Invoke('sendabelinkmsg', { linkmsg }); @@ -52,8 +52,8 @@ export class CyclistBridge extends Cyclist { this.lastEnd = 0; this.setStarted(false); const linkmsg = { - bpm: 110, - play: false, + cps: 0.5, + started: false, timestamp: Date.now(), }; Invoke('sendabelinkmsg', { linkmsg }); diff --git a/src-tauri/src/ablelinkbridge.rs b/src-tauri/src/ablelinkbridge.rs index d1bf7d652..79654bba7 100644 --- a/src-tauri/src/ablelinkbridge.rs +++ b/src-tauri/src/ablelinkbridge.rs @@ -11,8 +11,8 @@ use tauri::Window; #[derive(Deserialize, Clone, serde::Serialize)] pub struct LinkMsg { - pub play: bool, - pub bpm: f64, + pub started: bool, + pub cps: f64, pub timestamp: u64, } @@ -56,6 +56,16 @@ impl AbeLinkState { } } +fn bpm_to_cps(bpm: f64) -> f64 { + let cpm = bpm / 4.0; + return cpm / 60.0; +} + +fn cps_to_bpm(cps: f64) -> f64 { + let cpm = cps * 60.0; + return cpm * 4.0; +} + pub fn init(_logger: Logger, abelink_to_js: AbeLinkToJs, abelink: Arc>) { tauri::async_runtime::spawn(async move { /* ........................................................... @@ -74,6 +84,7 @@ pub fn init(_logger: Logger, abelink_to_js: AbeLinkToJs, abelink: Arc) -> Result<(), String> { - println!("bpm {} play {}", linkmsg.bpm, linkmsg.play); let mut abelink = state.abelink.lock().await; let started = abelink.session_state.is_playing(); let time_stamp = abelink.link.clock_micros(); let quantum = abelink.quantum; + let linkmsg_bpm = cps_to_bpm(linkmsg.cps); - if linkmsg.play != started { - abelink.session_state.set_is_playing_and_request_beat_at_time(linkmsg.play, time_stamp as u64, 0.0, quantum); + if linkmsg.started != started { + abelink.session_state.set_is_playing_and_request_beat_at_time(linkmsg.started, time_stamp as u64, 0.0, quantum); } - if linkmsg.bpm != abelink.session_state.tempo() { - abelink.session_state.set_tempo(linkmsg.bpm, time_stamp); + if linkmsg_bpm != abelink.session_state.tempo() { + abelink.session_state.set_tempo(linkmsg_bpm, time_stamp); } abelink.commit_app_state(); drop(abelink);