So, here are two functions to take care of the basic OSC commands.
(Factoring it into functions will
make the implementation of Pattern:asScore simpler and make it
possible to write Event:asBundle.)
~schedBundle { | time, server, bundle |
if (time == 0) {
server.sendBundle(server.latency, bundle)
} {
thisThread.sched ( time, {
server.sendBundle(server.latency, bundle) })
}
}
~schedSustainedBundle { |time, server, bundle, sustain, releaseBundle |
if (time == 0) {
server.sendBundle(server.latency, bundle)
} {
thisThread.sched ( time, {
server.sendBundle(server.latency, bundle) })
};
thisThread.sched ( time + sustain, {
server.sendBundle(server.latency, releaseBundle) });
}
In the default note routine there would be no reference to Server.latency.
Instead you would have:
lag = ~lag + ~latency;
with ~latency = 0 by default and altered when using James' priority scheme.
And, down where the note plays:
if (hasGate) {
bndl.do {|msgArgs, i|
var id, dt;
dt = i * strum + lag;
id = server.nextNodeID;
~schedSustainedBundle.value(dt, server,
[\s_new, instrumentName, id, addAction, group] ++ msgArgs, sustain,
[\n_set, id, \gate, 0])
}
} {
bndl.do {|msgArgs, i|
var id, dt;
dt = i * strum + lag;
id = server.nextNodeID;
~schedBundle.value(dt, server, [\s_new,
instrumentName, id, addAction, group] ++ msgArgs)
}
}
_______________________________________________
Sc-devel mailing list
Sc-devel@xxxxxxxxxxxxxxx
http://www.create.ucsb.edu/mailman/listinfo/sc-devel