1import { Pattern, ClockCollator } from '@strudel/core'; 2import { parseControlsFromHap } from 'node_modules/@strudel/osc/osc.mjs'; 3import { Invoke } from './utils.mjs'; 4 5const collator = new ClockCollator({}); 6 7export async function oscTriggerTauri(hap, currentTime, cps = 1, targetTime) { 8 const controls = parseControlsFromHap(hap, cps); 9 const params = []; 10 const timestamp = collator.calculateTimestamp(currentTime, targetTime); 11 12 Object.keys(controls).forEach((key) => { 13 const val = controls[key]; 14 const value = typeof val === 'number' ? val.toString() : val; 15 16 if (value == null) { 17 return; 18 } 19 params.push({ 20 name: key, 21 value, 22 valueisnumber: typeof val === 'number', 23 }); 24 }); 25 26 if (params.length === 0) { 27 return; 28 } 29 const message = { target: '/dirt/play', timestamp, params }; 30 setTimeout(() => { 31 Invoke('sendosc', { messagesfromjs: [message] }); 32 }); 33} 34Pattern.prototype.osc = function () { 35 return this.onTrigger(oscTriggerTauri); 36};