From 69884c61b43733c4f20a9ac159a27ebe5eafae2a Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 28 Mar 2022 21:41:49 +0100 Subject: [PATCH 1/7] first (broken) attempt --- packages/osc/osc.mjs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 packages/osc/osc.mjs diff --git a/packages/osc/osc.mjs b/packages/osc/osc.mjs new file mode 100644 index 00000000..b8a36867 --- /dev/null +++ b/packages/osc/osc.mjs @@ -0,0 +1,16 @@ +import {OSC} from 'osc-js'; +//const OSC = require('osc-js'); + +const comm = new OSC(); +comm.open(); + +Pattern.prototype.osc = function () { + return this._withEvent((event) => { + const onTrigger = (time, event) => { + const keyvals = Object.entries(event.value).flat(); + const message = new OSC.message("/dirt/play", ...keyvals); + comm.send(message); + }; + return event.setContext({ ...event.context, onTrigger }); + }); +}; From 7fca7e6bd9e05ac1297ace8a0e390bbcb9125b1e Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 28 Mar 2022 22:10:20 +0100 Subject: [PATCH 2/7] attempt to send an OSC message --- packages/osc/osc.mjs | 14 ++++++++++---- repl/src/App.js | 1 + 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/osc/osc.mjs b/packages/osc/osc.mjs index b8a36867..3f079680 100644 --- a/packages/osc/osc.mjs +++ b/packages/osc/osc.mjs @@ -1,5 +1,7 @@ -import {OSC} from 'osc-js'; -//const OSC = require('osc-js'); + +import OSC from './node_modules/osc-js/lib/osc.js'; +import { Pattern, isPattern } from '@strudel.cycles/core/strudel.mjs'; +//import {OSC} from 'osc-js'; const comm = new OSC(); comm.open(); @@ -7,8 +9,12 @@ comm.open(); Pattern.prototype.osc = function () { return this._withEvent((event) => { const onTrigger = (time, event) => { - const keyvals = Object.entries(event.value).flat(); - const message = new OSC.message("/dirt/play", ...keyvals); + //const keyvals = Object.entries(event.value).flat(); + //const message = new OSC.Message("/dirt/play", ...keyvals); + const message = new OSC.Message( + '/dirt/play', + ...['_id_', '1', 'cps', 0.5625, 'cycle', 412.3333435058594, 'delta', 0.592592716217041, 'orbit', 0, 's', 'hh'], + ); comm.send(message); }; return event.setContext({ ...event.context, onTrigger }); diff --git a/repl/src/App.js b/repl/src/App.js index 4b5ffc83..4f522aea 100644 --- a/repl/src/App.js +++ b/repl/src/App.js @@ -28,6 +28,7 @@ import '@strudel.cycles/xen/tune.mjs'; import '@strudel.cycles/core/euclid.mjs'; import '@strudel.cycles/tone/pianoroll.mjs'; import '@strudel.cycles/tone/draw.mjs'; +import '@strudel.cycles/osc/osc.mjs'; extend(Tone, strudel, strudel.Pattern.prototype.bootstrap(), toneHelpers, voicingHelpers, drawHelpers, uiHelpers, { gist, From 0b8919de61d2e277b100a109b177ea03ef24d969 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 29 Mar 2022 08:12:34 +0100 Subject: [PATCH 3/7] send actual osc parameters --- packages/osc/osc.mjs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/packages/osc/osc.mjs b/packages/osc/osc.mjs index 3f079680..4f56b8f2 100644 --- a/packages/osc/osc.mjs +++ b/packages/osc/osc.mjs @@ -1,4 +1,3 @@ - import OSC from './node_modules/osc-js/lib/osc.js'; import { Pattern, isPattern } from '@strudel.cycles/core/strudel.mjs'; //import {OSC} from 'osc-js'; @@ -7,16 +6,12 @@ const comm = new OSC(); comm.open(); Pattern.prototype.osc = function () { - return this._withEvent((event) => { - const onTrigger = (time, event) => { - //const keyvals = Object.entries(event.value).flat(); - //const message = new OSC.Message("/dirt/play", ...keyvals); - const message = new OSC.Message( - '/dirt/play', - ...['_id_', '1', 'cps', 0.5625, 'cycle', 412.3333435058594, 'delta', 0.592592716217041, 'orbit', 0, 's', 'hh'], - ); - comm.send(message); - }; - return event.setContext({ ...event.context, onTrigger }); - }); + return this._withEvent((event) => { + const onTrigger = (time, event) => { + const keyvals = Object.entries(event.value).flat(); + const message = new OSC.Message('/dirt/play', ...keyvals); + comm.send(message); + }; + return event.setContext({ ...event.context, onTrigger }); + }); }; From ba095d8e7f327415437295d71e4cfe831b011859 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 29 Mar 2022 15:36:56 +0100 Subject: [PATCH 4/7] Stop failing on no tests --- packages/osc/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/osc/package.json b/packages/osc/package.json index 67a0cc76..f425c463 100644 --- a/packages/osc/package.json +++ b/packages/osc/package.json @@ -4,7 +4,7 @@ "description": "OSC messaging for strudel", "main": "osc.mjs", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", + "test": "echo \"No tests present.\" && exit 0", "server": "node server.js", "tidal-sniffer": "node tidal-sniffer.js", "client": "npx serve -p 4321" From 0bfbd87bbf2d5e64be9876e575a547f720713a9d Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 29 Mar 2022 16:39:52 +0100 Subject: [PATCH 5/7] try to send osc as timestamped bundle --- packages/osc/osc.mjs | 7 +++++-- packages/osc/server.js | 9 ++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/osc/osc.mjs b/packages/osc/osc.mjs index 4f56b8f2..9d78f044 100644 --- a/packages/osc/osc.mjs +++ b/packages/osc/osc.mjs @@ -1,15 +1,18 @@ import OSC from './node_modules/osc-js/lib/osc.js'; import { Pattern, isPattern } from '@strudel.cycles/core/strudel.mjs'; -//import {OSC} from 'osc-js'; const comm = new OSC(); comm.open(); +const startTime = Date.now(); +const latency = 0.1 * 1000; Pattern.prototype.osc = function () { return this._withEvent((event) => { const onTrigger = (time, event) => { + console.log(time); const keyvals = Object.entries(event.value).flat(); - const message = new OSC.Message('/dirt/play', ...keyvals); + const ts = startTime + (time*1000); + const message = new OSC.Message('/dirt/play', ts, ...keyvals); comm.send(message); }; return event.setContext({ ...event.context, onTrigger }); diff --git a/packages/osc/server.js b/packages/osc/server.js index 0d5c6986..a96c2f16 100644 --- a/packages/osc/server.js +++ b/packages/osc/server.js @@ -28,10 +28,13 @@ console.log('websocket server running on port', config.wsServer.port); // listen for messages from the client osc.on('*', (m) => { - // forward message to supercollider?? + console.log("hmm!"); + const ts = m.args.shift(); const message = new OSC.Message(m.address, ...m.args); - osc.send(message); // will it even be received?? - console.log('forward:', m.address, m.args); + console.log(m.args); + const bundle = new OSC.Bundle([message], new Date(ts)) + osc.send(bundle); + console.log('forward:', bundle); }); /* From d0d19778a4cc3fe0ed63c93d9bf00ebe751c78c5 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 29 Mar 2022 17:03:30 +0100 Subject: [PATCH 6/7] try sending osc in timestamped bundle with added latency --- packages/osc/osc.mjs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/osc/osc.mjs b/packages/osc/osc.mjs index 9d78f044..33586d29 100644 --- a/packages/osc/osc.mjs +++ b/packages/osc/osc.mjs @@ -4,16 +4,17 @@ import { Pattern, isPattern } from '@strudel.cycles/core/strudel.mjs'; const comm = new OSC(); comm.open(); const startTime = Date.now(); -const latency = 0.1 * 1000; +const latency = 0.2; Pattern.prototype.osc = function () { return this._withEvent((event) => { const onTrigger = (time, event) => { console.log(time); const keyvals = Object.entries(event.value).flat(); - const ts = startTime + (time*1000); - const message = new OSC.Message('/dirt/play', ts, ...keyvals); - comm.send(message); + const ts = startTime + ((time+latency)*1000); + const message = new OSC.Message('/dirt/play',...keyvals); + const bundle = new OSC.Bundle([message], ts) + comm.send(bundle); }; return event.setContext({ ...event.context, onTrigger }); }); From 330263028e5df573dda88c3ab6eb4960377d0ed1 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 29 Mar 2022 17:04:00 +0100 Subject: [PATCH 7/7] it seems the custom handler wasn't being used --- packages/osc/server.js | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/osc/server.js b/packages/osc/server.js index a96c2f16..dd697d8c 100644 --- a/packages/osc/server.js +++ b/packages/osc/server.js @@ -1,3 +1,4 @@ +const dgram = require('dgram') const OSC = require('osc-js'); const config = { @@ -18,6 +19,9 @@ const config = { port: 8080, // @param {number} Port of WebSocket server }, }; + + + const osc = new OSC({ plugin: new OSC.BridgePlugin(config) }); osc.open(); // start a WebSocket server on port 8080 @@ -27,15 +31,15 @@ console.log('osc server running on port', config.udpServer.port); console.log('websocket server running on port', config.wsServer.port); // listen for messages from the client -osc.on('*', (m) => { - console.log("hmm!"); - const ts = m.args.shift(); - const message = new OSC.Message(m.address, ...m.args); - console.log(m.args); - const bundle = new OSC.Bundle([message], new Date(ts)) - osc.send(bundle); - console.log('forward:', bundle); -}); +// osc.on('*', (m) => { +// console.log("hmm!"); +// const ts = m.args.shift(); +// const message = new OSC.Message(m.address, ...m.args); +// console.log(m.args); +// const bundle = new OSC.Bundle([message], new Date(ts)) +// osc.send(bundle); +// console.log('forward:', bundle); +// }); /* example tidal messages: