diff --git a/README.md b/README.md index b1251db..8bd3240 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,7 @@ Additional functions can be found in the [includes](https://github.com/hundredra - `(js)` Javascript interop. - `(test name a b)` - `(benchmark fn)` logs time taken to execute a function. +- `(osc ~address)` returns the last received osc msg on port 12940 ## Extras diff --git a/desktop/main.js b/desktop/main.js index 33934bd..d0cfba2 100644 --- a/desktop/main.js +++ b/desktop/main.js @@ -1,6 +1,7 @@ const { app, BrowserWindow, webFrame, Menu } = require('electron') const path = require('path') const url = require('url') +const osc = require('osc') const shell = require('electron').shell let isShown = true diff --git a/desktop/package.json b/desktop/package.json index fd78a06..b846576 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -4,6 +4,7 @@ "main": "main.js", "scripts": { "start": "electron .", + "install": "electron-rebuild", "clean": "rm -r ~/Desktop/Ronin-darwin-x64/ ; rm -r ~/Desktop/Ronin-linux-x64/ ; rm -r ~/Desktop/Ronin-win32-x64/ ; echo 'cleaned build location'", "build_osx": "electron-packager . Ronin --platform=darwin --arch=x64 --out ~/Desktop/ --overwrite --icon=icon.icns ; echo 'Built for OSX'", "build_linux": "electron-packager . Ronin --platform=linux --arch=x64 --out ~/Desktop/ --overwrite --icon=icon.ico ; echo 'Built for LINUX'", @@ -16,8 +17,12 @@ "push_status": "~/butler status hundredrabbits/ronin", "push": "npm run build ; npm run push_theme ; npm run push_osx ; npm run push_linux ; npm run push_win ; npm run clean ; npm run push_status" }, + "dependencies": { + "osc": "^2.3.1" + }, "devDependencies": { "electron": "^5.0.6", - "electron-packager": "^13.1.1" + "electron-packager": "^13.1.1", + "electron-rebuild": "^1.8.5" } } diff --git a/desktop/sources/index.html b/desktop/sources/index.html index ce810ca..dd1d251 100644 --- a/desktop/sources/index.html +++ b/desktop/sources/index.html @@ -9,6 +9,8 @@ + + diff --git a/desktop/sources/scripts/library.js b/desktop/sources/scripts/library.js index 0bd9482..3ace57e 100644 --- a/desktop/sources/scripts/library.js +++ b/desktop/sources/scripts/library.js @@ -377,4 +377,14 @@ function Library (ronin) { console.log(`time taken: ${Date.now() - start}ms`) return result } + + // osc + + this.osc = (...args) => { // Returns a rect of the frame. + if (args.length >= 1) { + return ronin.getOsc()[args[0]] + } else { + return ronin.getOsc(); + } + } } diff --git a/desktop/sources/scripts/osc.js b/desktop/sources/scripts/osc.js new file mode 100644 index 0000000..1f0eb65 --- /dev/null +++ b/desktop/sources/scripts/osc.js @@ -0,0 +1,26 @@ +'use strict' + +function Osc (ronin) { + const osc = require('osc') + + this.oscMsg = {} + + this.start = function () { + var udpPort = new osc.UDPPort({ + localAddress: "0.0.0.0", + localPort: 12940, + metadata: true + }); + + udpPort.on("message", this.onOscMsg) + + udpPort.open(); + ronin.log("osc started") + } + + this.onOscMsg = (oscMsg, timeTag, info) => { + this.oscMsg[oscMsg.address] = oscMsg; + ronin.log("An OSC message just arrived!", oscMsg) + ronin.log("Remote info is: ", info); + } +} diff --git a/desktop/sources/scripts/ronin.js b/desktop/sources/scripts/ronin.js index 927d388..22718d9 100644 --- a/desktop/sources/scripts/ronin.js +++ b/desktop/sources/scripts/ronin.js @@ -22,7 +22,7 @@ function Ronin () { this.surface = new Surface(this) this.library = new Library(this) this.interpreter = new Lisp(this.library, this.includes) - + this.osc = new Osc(this) // Parameters this.always = false @@ -46,7 +46,11 @@ function Ronin () { this.source.start() this.commander.start() this.surface.start() - console.log('Ronin', 'Started') + this.osc.start() + } + + this.getOsc = function() { + return this.osc.oscMsg; } this.reset = function () { diff --git a/examples/osc1.lisp b/examples/osc1.lisp new file mode 100644 index 0000000..70e1e6f --- /dev/null +++ b/examples/osc1.lisp @@ -0,0 +1,11 @@ +(clear) +(def x (of (osc "/test") "args" "0" "value")) +(def y (of (osc "/test") "args" "1" "value")) +(def r (of (osc "/test") "args" "2" "value")) + +(fill +(circle x y r) +"red") +(stroke +(circle x y r) +5 "white")