From e268802f3cb268cf6cdec6aa7fd60abd61522b1d Mon Sep 17 00:00:00 2001 From: Kaspars Jaudzems Date: Mon, 13 May 2024 11:10:34 +0300 Subject: [PATCH] OSC/SuperDirt fixes (#1093) * If note is a midi note, and it's sent together with octave to SuperDirt, then that will be wrong. instead we should to midinote whenever sure that it's a midi note. * mapbank to work like tidal's drumFrom * roomsize is size in SuperDirt * fix tidal-sniffer * export `registerControl` (but see #1098) --- packages/core/controls.mjs | 2 +- packages/osc/osc.mjs | 12 ++++++++++-- packages/osc/tidal-sniffer.js | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/core/controls.mjs b/packages/core/controls.mjs index 166f0ac2..d5dbef13 100644 --- a/packages/core/controls.mjs +++ b/packages/core/controls.mjs @@ -47,7 +47,7 @@ export function createParam(names) { return func; } -function registerControl(names, ...aliases) { +export function registerControl(names, ...aliases) { const name = Array.isArray(names) ? names[0] : names; let bag = {}; bag[name] = createParam(names); diff --git a/packages/osc/osc.mjs b/packages/osc/osc.mjs index 5552a1c1..422e56da 100644 --- a/packages/osc/osc.mjs +++ b/packages/osc/osc.mjs @@ -6,7 +6,7 @@ This program is free software: you can redistribute it and/or modify it under th import OSC from 'osc-js'; -import { logger, parseNumeral, Pattern, getEventOffsetMs } from '@strudel/core'; +import { logger, parseNumeral, Pattern, getEventOffsetMs, isNote, noteToMidi } from '@strudel/core'; let connection; // Promise function connect() { @@ -52,7 +52,15 @@ Pattern.prototype.osc = function () { const controls = Object.assign({}, { cps, cycle, delta }, hap.value); // make sure n and note are numbers controls.n && (controls.n = parseNumeral(controls.n)); - controls.note && (controls.note = parseNumeral(controls.note)); + if (typeof controls.note !== 'undefined') { + if (isNote(controls.note)) { + controls.midinote = noteToMidi(controls.note, controls.octave || 3); + } else { + controls.note = parseNumeral(controls.note); + } + } + controls.bank && (controls.s = controls.bank + controls.s); + controls.roomsize && (controls.size = parseNumeral(controls.roomsize)); const keyvals = Object.entries(controls).flat(); // time should be audio time of onset // currentTime should be current time of audio context (slightly before time) diff --git a/packages/osc/tidal-sniffer.js b/packages/osc/tidal-sniffer.js index 2cbb15e6..10bf0ad0 100644 --- a/packages/osc/tidal-sniffer.js +++ b/packages/osc/tidal-sniffer.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