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")