var WebSocket = require('ws');
var ws = new WebSocket('ws://192.168.10.100:8080/entry');
var upmBuzzer = require('jsupm_buzzer');
var numBuzzers = 5; // ブザー数 [1,8]
var inputs = [3, 5, 6, 9];
var buzzers = [];
var volume = 0.1;
var r = 75;
var f3js = require('f3js');
var c = f3js.createContainer();
c.x = 50;
c.y = 50;
var c1 = 43
, c2 = 36
, x = 70
, y = 140
, width = 70;
var a = c.createPath();
/*a.moveTo(x, y);
a.curveTo(x
, y + c1
, x + width
, y + c1
, x + width
, y);
a.curveTo(x + width
, y - c2
, x + width * 1.5 - c2
, y - width * 0.5
, x + width * 1.5
, y - width * 0.5);
a.curveTo(x + width * 1.5 + c1
, y - width * 0.5
, x + width * 1.5 + c1
, y - width * 1.5
, x + width * 1.5
, y - width * 1.5);
a.curveTo(x + width * 1.5 - c2
, y - width * 1.5
, x + width
, y - width * 2 + c2
, x + width
, y - width * 2);
a.curveTo(x + width
, y - width * 2 - c1
, x
, y - width * 2 - c1
, x
, y - width * 2);
a.curveTo(x
, y - width * 2 + c2
, x - width * 0.5 + c2
, y - width * 1.5
, x - width * 0.5
, y - width * 1.5);
a.curveTo(x - width * 0.5 - c1
, y - width * 1.5
, x - width * 0.5 - c1
, y - width * 0.5
, x - width * 0.5
, y - width * 0.5);
a.curveTo(x - width * 0.5 + c2
, y - width * 0.5
, x
, y - c2
, x
, y);
a.close();
a.matrix.translate(-40, -5);*/
var ps = a.extrude(60);
ps[0].y = 50;
ps[0].x = 270;
f3js.add(ps[0]);
var dx = [ 65, 145, 65, -15]
, dy = [-15, 65, 145, 65];
var circle = c.drawCircle(65, 65, r);
circle.layout = 'distribute';
for (var i = 0; i < numBuzzers; i ++) {
var buzzer = new upmBuzzer.Buzzer(inputs[i]);
buzzer.setVolume(volume);
buzzer.stopSound();
buzzer.stopSound();
var p = c.add(buzzer, circle);
p.drawRectangle(15, -5, 5, 10);
var pp = p.createPath()
.moveTo(-25, 10)
.curveTo(-15, 30, 15, 30, 25, 10)
.moveTo(-25, 10)
.lineTo(-25 ,-5)
.moveTo(25, 10)
.lineTo(25 ,-5);
// draw arc
var thetaOffset = 25 / r;
var theta = ((Math.PI * 2) - (thetaOffset * 2 * numBuzzers)) / numBuzzers;
var n = 50;
for (var j = 0; j <= n; j ++) {
pp.lineTo(
Math.sin(thetaOffset + (theta / n) * j) * r,
Math.cos(thetaOffset + (theta / n) * j) * r - r
);
}
buzzers.push(buzzer);
}
var pathl = c.createPath();
pathl.moveTo(0, 40).dovetailTo(0, 85, 3, 1, false, false, true);
ps = pathl.extrude(60);
ps[0].x = 10; ps[0].y = 230;
f3js.add(ps[0]);
var pathr = c.createPath();
pathr.moveTo(130, 40).dovetailTo(130, 90, 3, 1, false, false, true);
ps = pathr.extrude(60);
ps[0].x = 70; ps[0].y = 230;
f3js.add(ps[0]);
var patht = c.createPath();
patht.moveTo(30, 25).dovetailTo(100, 25, 3, 1, false, false, true);
ps = patht.extrude(60);
ps[0].x = 130; ps[0].y = 230;
f3js.add(ps[0]);
var pathb = c.createPath();
pathb.moveTo(30, 100).dovetailTo(100, 100, 3, 1, false, false, true);
ps = patht.extrude(60);
ps[0].x = 210; ps[0].y = 230;
f3js.add(ps[0]);
var pathlc = c.createPath();
pathlc.moveTo(220, 40).dovetailTo(220, 85, 3, 1, false, false, true);
var pathrc = c.createPath();
pathrc.moveTo(350, 40).dovetailTo(350, 90, 3, 1, false, false, true);
var pathtc = c.createPath();
pathtc.moveTo(250, 25).dovetailTo(320, 25, 3, 1, false, false, true);
var pathbc = c.createPath();
pathbc.moveTo(250, 100).dovetailTo(320, 100, 3, 1, false, false, true);
ws.on('message', function(message) {
var data = JSON.parse(message);
switch (data.message) {
case 'note_on':
if(buzzers[data.channel]) {
buzzers[data.channel].setVolume(volume);
buzzers[data.channel].playSound(1000000 / data.frequency, 0);
}
break;
case 'note_off':
if(buzzers[data.channel]) {
buzzers[data.channel].stopSound();
buzzers[data.channel].stopSound();
}
break;
}
});