You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.3 KiB
Plaintext

9000 => int port; // port to listen for osc subscribe messages
if (me.args()) me.arg(0) => Std.atoi => port;
120 => int bpm; // beats per minute
0 => int count; // count (1 through 4) of the beat.
OscRecv recv;
port => recv.port;
recv.listen();
recv.event("/subscribe, si") @=> OscEvent subscribeEvent;
OscSend @ listeners[64]; OscSend send;
fun void subscribe() {
while (true) {
subscribeEvent => now;
while (subscribeEvent.nextMsg() != 0) {
subscribeEvent.getString() => string host;
subscribeEvent.getInt() => int port;
addListener(host, port);
<<< "subscribe", host, port >>>;
}
}
}
spork ~ subscribe();
fun void addListener(string host, int port) {
for (0 => int i; i < listeners.size(); i++) {
if (listeners[i] == null) {
OscSend listener;
listener.setHost(host, port);
listener @=> listeners[i];
return;
}
}
}
fun void sendBeat(int count) {
for (0 => int i; i < listeners.size(); i++) {
if (listeners[i] != null) {
listeners[i].startMsg("/down, i");
listeners[i].addInt(count);
}
}
}
while (true) {
sendBeat(count+1);
1 +=> count;
if (count % 4 == 0) {
0 => count;
}
1::minute / bpm => now;
}