-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmidi.js
113 lines (89 loc) · 2.66 KB
/
midi.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/**
* Module dependencies.
*/
var Twitter = require('twitter')
, midi = require('midi')
, config = require('./config').config
, io = require('socket.io').listen(config.output_socket);
io.set('log level', 1);
/* MINISTRY OF SOUND CREDENTIALS */
var twit = new Twitter({
consumer_key: '5o8VmjHTSpPcpq2CnEXnw',
consumer_secret: 'QJjuyljTgmK1uV3C74C06iaYBnKxxPpPqvpgACo',
access_token_key: '14860093-i5lSz8QnV9WjpOLWuRONhDTGN7e8kyivP6Nh0JzbM',
access_token_secret: 'Fqf78nlIN6XOQpxxTDyXusfAp1m8AvmjlYrFtpOlUzU'
});
var sendTweets = false;
var onTweet = function(tweet) {
try {
if (sendTweets) io.sockets.emit("tweet",{tweet:tweet});
} catch (e) {}
}
var sendTweets = false;
twit.stream('statuses/sample', function(stream) {
stream.on('data', function(data) {
if (data.text) {
onTweet({
text: data.text,
username: data.user.screen_name
});
}
});
});
function createLaunchpad(name) {
var midiPort = config.midiPort+name;
// Set up a new output.
var output = new midi.output();
// Set up a new input.
var input = new midi.input();
// Open the first available output port.
output.openPort(midiPort);
input.openPort(midiPort);
console.log("running port: "+output.getPortName(midiPort));
var connections = [];
io.sockets.on('connection', function (socket) {
connections.push(socket);
socket.on('disconnect', function() {
connections.forEach(function(connection, i) {
if (connection === socket) {
connections.splice(i, 1);
}
});
});
// on new message
socket.on('midijs', function (data) {
if (data.message.name === name) {
// expected sample: {message:[175,22,1]}
output.sendMessage(data.message.message);
}
});
socket.on("tweet_start", function() {
sendTweets = true;
})
socket.on("tweet_end", function() {
sendTweets = false;
})
});
// Configure a callback.
input.on('message', function(deltaTime, message) {
connections.forEach(function(connection) {
connection.emit('midijs', { message: message, deltaTime:deltaTime, name:name });
});
});
// Sysex, timing, and active sensing messages are ignored
// by default. To enable these message types, pass false for
// the appropriate type in the function below.
// Order: (Sysex, Timing, Active Sensing)
input.ignoreTypes(false, false, false);
}
var successes = 0;
for (var i = 0; i < 16; i++) {
try {
createLaunchpad(i);
console.log("success: "+i);
successes++;
} catch (e) {
console.log("failed: "+i);
}
}
console.log("successes: "+successes);