CC3A wk 3
Triggering MIDI via OSC
I enjoyed working as a group on this project. We each seemed to contribute to a certain aspect of the exercise, although to me it is apparent that Jake and Dave have a much better grasp of the language than I. Although what they did made sense to me, I don't think I could have discovered how to go about doing it as quickly as they did.
Rather then look at the code sprawled across the screen, feel free to download them as a compact zip file. :)
All of the rtf files
/*
COMPUTER 1.
(1a) Takes MIDI note data and converts it to frequency
*/
//MIDI initialise
MIDIClient.init;
//connect to Remote SL (novation)
MIDIIn.connectByUID(
inport: 0,
uid: MIDIClient.sources.at(0).uid
);
//so notes will come up on the post whatsit
(
MIDIIn.noteOn = {
arg uid,
chan,
num,
vel
;
//["UID", uid, "Channel", chan, "Note", num, "Velocity", vel].postln;
x = num.midicps.postln; //post the freq (x) to yourself
{ //send x to the network (n)
n.sendMsg(
"treeTits",
x.postln;
);
}.value
};
)
/*
COMPUTER 1.
(1b) Sends the frequency (variable x) via OSC to computer 2
*/
//initialise Network
(
n = NetAddr(
hostname: "129.127.196.19",
port: 57120
);
)
Computer 2
(
// Open Sound Control Responder
r = OSCresponder
(
addr: nil, // Nil respond to messages from anywhere
cmdName: "treeTits", // An OSC command (same name as messge sent)
action: { // Action to perform
// Arguments - default
arg time, // OSC time
resp, // Responder name
msg, // Message
addr // Address
;
// Feedback
// [time, resp, msg, addr].postln;
x = {msg.at(1).cpsmidi}.value.postln;
{
// Send a message to that computer - in this case the converted MIDI value
n.sendMsg(
"treeTits", // Command Name (Same as OSCResponder Command Name)
//MIDIIn.noteOn // Argument Value
x.postln
);
}.value.postln;
{
// Send MIDI Note Value
m.noteOn(
chan: 1, // MIDI Channel
note: x, // Note Number
veloc: 90 // Velocity
);
m.noteOff(
chan: 1, // MIDI Channel
note: x, // Note Number
veloc: 90 // Velocity
);
}.value
}
).add; // Add method - adds OSC responder to server
)
// Open Sound Controller Sender
// Connect by Device Index Address
MIDIIn.connectByUID(
inport: 0,
uid: MIDIClient.sources.at(4).uid
);
(
// Setup MIDIIn Controller
MIDIIn.noteOn =
{
// Arguments
arg uid, // Device ID
chan, // MIDI Channel
num, // Note Number
vel // Velocity
;
// Feedback
//["UID", uid, "Channel", chan, "Note", num, "Velocity", vel].postln;
~noteToFreq = num.midicps.postln;
{
// Send a message to that computer
n.sendMsg(
"treeTits", // Command Name (Same as OSCResponder Command Name)
//MIDIIn.noteOn // Argument Value
~noteToFreq.postln
);
}.value
};
)
Computer 3 - playing the simple synth - MIDI out
(
// Setup MIDIOut
m = MIDIOut(
port: 0,
uid: MIDIClient.destinations.at(8).uid
);
)
(
// Open Sound Control Responder
r = OSCresponder
(
addr: nil, // Nil respond to messages from anywhere
cmdName: "treeTits", // An OSC command (same name as messge sent)
action: { // Action to perform
// Arguments - default
arg time, // OSC time
resp, // Responder name
msg, // Message
addr // Address
;
// Feedback
// [time, resp, msg, addr].postln;
x = {msg.at(1)}.value.postln;
{
// Send MIDI Note Value
m.noteOn(
chan: 1, // MIDI Channel
note: x, // Note Number
veloc: 90 // Velocity
);
m.noteOff(
chan: 1, // MIDI Channel
note: x, // Note Number
veloc: 90 // Velocity
);
}.value
}
).add; // Add method - adds OSC responder to server
)
2 Comments:
Looking back, I wish I wasn't such a monkey toucher.
Amen.
Post a Comment
<< Home