neume.js example - receive osc message
use: neume.js / node-osc-min.js
HTML
<script src="http://mohayonao.github.io/neume.js/build/neume.min.js"></script>
<script src="https://dl.dropboxusercontent.com/u/645229/cdn/osc-min.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>
<button id="start">start</button>
<pre id="osc"></pre>
JavaScript
var Neume = neume(new AudioContext());
var Synth = new Neume(function($, freq, pos, mod) {
var out;
out = $("sin", { freq: mod, add: freq, mul: 2 });
out = $("saw", { freq: out, mul: 0.15 });
out = $("lpf", { freq: 1200, Q: 12 }, out);
out = $("adsr", { a: 0.1, d: 0.25, s: 0.2, r: 2 }, out).release("+0.75").on("end", function(e) {
this.stop(e.playbackTime);
});
out = $("pan2", { pos: pos }, out);
return $("out", { bus: 1 }, out);
});
var Out = new Neume(function($) {
var out;
out = $("in", 1);
out = $("comb", { gain: 0.5, fbGain: 0.65, delay: 0.05 }, out);
out = $("comp", out);
return out;
});
var socket = new EventEmitter();
var emitter = new EventEmitter();
socket.on("osc", function(msg) {
emitter.emit("osc", osc.fromBuffer(msg));
});
emitter.on("osc", function(msg) {
var freq = msg.args[0].value;
var pos = msg.args[1].value;
var mod = msg.args[2].value;
new Synth(freq, pos, mod).start();
$("#osc").text(JSON.stringify(msg, null, 2));
});
var out = null, timerId = 0, count = 0;
$("#start").on("click", function() {
if (out) {
out.fadeOut("+0", 0.5);
out = null;
clearInterval(timerId);
$(this).text("start").css("color", "black");
} else {
count = 0;
out = new Out().fadeIn("+0", 0.5);
timerId = setInterval(serverProcess, 500);
$(this).text("stop").css("color", "red");
}
});
function serverProcess() {
if (Math.random() < [ 0.8, 0.2 ][count++ % 2]) {
socket.emit("osc", _.sample(oscMsg));
}
}
function EventEmitter() {
var callback = {};
return {
on: function(name, func) {
callback[name] = func;
},
emit: function(name, msg) {
callback[name](msg);
}
};
}
var oscMsg =...