diff --git a/packages/core/util.mjs b/packages/core/util.mjs index 9ab9bc7c..e8e40398 100644 --- a/packages/core/util.mjs +++ b/packages/core/util.mjs @@ -62,8 +62,8 @@ export const valueToMidi = (value, fallbackValue) => { }; // used to schedule external event like midi and osc out -export const getEventOffsetMs = (targetTime, currentTime) => { - return (targetTime - currentTime) * 1000; +export const getEventOffsetMs = (targetTimeSeconds, currentTimeSeconds) => { + return (targetTimeSeconds - currentTimeSeconds) * 1000; }; /** diff --git a/packages/desktopbridge/midibridge.mjs b/packages/desktopbridge/midibridge.mjs index 07a5f963..471c826e 100644 --- a/packages/desktopbridge/midibridge.mjs +++ b/packages/desktopbridge/midibridge.mjs @@ -1,5 +1,5 @@ import { Invoke } from './utils.mjs'; -import { Pattern, noteToMidi } from '@strudel/core'; +import { Pattern, getEventOffsetMs, noteToMidi } from '@strudel/core'; const ON_MESSAGE = 0x90; const OFF_MESSAGE = 0x80; @@ -9,8 +9,8 @@ Pattern.prototype.midi = function (output) { return this.onTrigger((time_deprecate, hap, currentTime, cps, targetTime) => { let { note, nrpnn, nrpv, ccn, ccv, velocity = 0.9, gain = 1 } = hap.value; //magic number to get audio engine to line up, can probably be calculated somehow - const latency = 0.034; - const offset = (targetTime - currentTime + latency) * 1000; + const latencyMs = 34; + const offset = getEventOffsetMs(targetTime, currentTime) + latencyMs; velocity = Math.floor(gain * velocity * 100); const duration = Math.floor((hap.duration.valueOf() / cps) * 1000 - 10); const roundedOffset = Math.round(offset); diff --git a/packages/midi/midi.mjs b/packages/midi/midi.mjs index ef5c792a..3ce894d6 100644 --- a/packages/midi/midi.mjs +++ b/packages/midi/midi.mjs @@ -122,8 +122,7 @@ Pattern.prototype.midi = function (output) { //magic number to get audio engine to line up, can probably be calculated somehow const latencyMs = 34; // passing a string with a +num into the webmidi api adds an offset to the current time https://webmidijs.org/api/classes/Output - const timeOffsetString = `${getEventOffsetMs(targetTime, currentTime) + latencyMs}`; - + const timeOffsetString = `+${getEventOffsetMs(targetTime, currentTime) + latencyMs}`; // destructure value let { note, nrpnn, nrpv, ccn, ccv, midichan = 1, midicmd, gain = 1, velocity = 0.9 } = hap.value; diff --git a/packages/osc/server.js b/packages/osc/server.js index 42722d28..7e0b9059 100644 --- a/packages/osc/server.js +++ b/packages/osc/server.js @@ -4,7 +4,7 @@ Copyright (C) 2022 Strudel contributors - see . */ -const OSC = require('osc-js'); +import OSC from 'osc-js'; const config = { receiver: 'ws', // @param {string} Where messages sent via 'send' method will be delivered to, 'ws' for Websocket clients, 'udp' for udp client