c2-utopia/utopia_mapiranje.scd

417 lines
10 KiB
Plaintext
Raw Permalink Normal View History

/************************
* MIDI / OSC MAPIRANJE *
***********************/
NetAddr.langPort;
/***********************************
* OSC MAPPING: Povezava na simona *
**********************************/
(
~simonIP = "10.42.1.2";
~oscS = NetAddr.new(~simonIP, 57120);
OSCFunc.trace(true); // debug osc
OSCFunc.trace(false); // debug osc
~senzorji.keys.do({ |id|
~senzorji[id].postln;
OSCdef.new((\accOSC ++ id).asSymbol, { |msg, time, addr, recvPort|
~oscS.sendMsg("/senzor/" ++ id ++ "/accX", msg[1].linlin(-50, 50, 0, 1));
~oscS.sendMsg("/senzor/" ++ id ++ "/accY", msg[2].linlin(-50, 50, 0, 1));
~oscS.sendMsg("/senzor/" ++ id ++ "/accZ", msg[3].linlin(-50, 50, 0, 1));
~oscS.sendMsg("/senzor/" ++ id ++ "/accSum", msg[4].linlin(-50, 50, 0, 1));
}, "/acc/" ++ id);
OSCdef.new((\eulerOSC ++ id).asSymbol, { |msg, time, addr, recvPort|
var pitch, roll, yaw;
// vrtenje sinusoidiziramo, da ni preskokov
pitch = msg[1].sin.linlin(-pi, pi, 0, 1);
roll = msg[2].sin.linlin(-pi, pi, 0, 1);
yaw = msg[3].sin.linlin(-pi, pi, 0, 1);
//[pitch, roll, yaw].postln;
~oscS.sendMsg("/senzor/" ++ id ++ "/pitch", pitch);
~oscS.sendMsg("/senzor/" ++ id ++ "/roll", roll);
~oscS.sendMsg("/senzor/" ++ id ++ "/yaw", yaw);
//["simon", pitch, roll, yaw].postln;
}, "/euler/" ++ id);
});
)
/************************************
* MIDI MAPPING: Povezava na boruta *
***********************************/
// Midi mapping funkcija
(
~midiVals = Dictionary.new;
~sendMidi = { | chan=0, cc=0, val=0 |
var key = chan.asString ++ "_" ++ cc, v = val;
v = val.floor.clip(0, 127);
if ((~midiVals[key] == nil) || (~midiVals[key] != val)) {
~midiVals[key] = val;
~midi.control(chan, cc, val);
["midi " ++ ~map, chan, cc, v].postln;
};
};
)
// MIDI MAP I
(
"MIDI MAP I !!!".postln;
~map = "I";
~senzorji.keys.do({ |id|
OSCdef.new((\eulerMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
var pitch, roll, yaw, freq, gain;
// vrtenje sinusoidiziramo, da ni preskokov
pitch = msg[1].sin.linlin(-pi, pi, 0, 1);
roll = msg[2].sin.linlin(-pi, pi, 0, 1);
yaw = msg[3].sin.linlin(-pi, pi, 0, 1);
// quick 16 (1) = frekvenca, quick 17 (2) = gain
switch (id,
4, {
freq = roll;
// Quick slots 1-3
~sendMidi.value(0, 16, freq * 127);
},
1, {
gain = yaw;
if (gain <= 0.5, {
gain = 0.5 - gain;
}, {
gain = gain - 0.5;
});
~sendMidi.value(0, 17, 64 + (gain * 127));
}
);
}, "/euler/" ++ id);
OSCdef.new((\accMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
// Pospeski: gremo od 0 ali iz sredine?
var accX, accY, accZ, accSum;
accX = msg[1].linlin(-50, 50, 0, 1);
accY = msg[2].linlin(-50, 50, 0, 1);
accZ = msg[3].linlin(-50, 50, 0, 1);
accSum = msg[4].linlin(-50, 50, 0, 1);
/*
switch (id,
3, {
~sendMidi.value(0, 19, (accX * 127).floor);
~sendMidi.value(0, 20, (accY * 127).floor);
~sendMidi.value(0, 21, (accZ * 127).floor);
}
);
*/
}, "/acc/" ++ id);
});
)
// MIDI MAP II
(
~map = "II";
"MIDI MAP II !!!".postln;
~senzorji.keys.do({ |id|
OSCdef.new((\eulerMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
var pitch, roll, yaw;
// vrtenje sinusoidiziramo, da ni preskokov
pitch = msg[1].sin.linlin(-pi, pi, 0, 1);
roll = msg[2].sin.linlin(-pi, pi, 0, 1);
yaw = msg[3].sin.linlin(-pi, pi, 0, 1);
// MORPHING EFEKT
switch (id,
4, {
// Quick slots 1-3
~sendMidi.value(0, 16, (-20 + (yaw * 150)).floor);
},
3, {
~sendMidi.value(0, 17, (-20 + (roll * 150).floor));
}
);
}, "/euler/" ++ id);
OSCdef.new((\accMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
// Pospeski: gremo od 0 ali iz sredine?
var accX, accY, accZ, accSum;
accX = msg[1].linlin(-50, 50, 0, 1);
accY = msg[2].linlin(-50, 50, 0, 1);
accZ = msg[3].linlin(-50, 50, 0, 1);
accSum = msg[4].linlin(-50, 50, 0, 1);
/*
switch (id,
3, {
~sendMidi.value(0, 19, (accX * 127).floor);
~sendMidi.value(0, 20, (accY * 127).floor);
~sendMidi.value(0, 21, (accZ * 127).floor);
}
);
*/
}, "/acc/" ++ id);
});
)
// MIDI MAP III
(
"MIDI MAP III !!!".postln;
~map = "III";
~senzorji.keys.do({ |id|
OSCdef.new((\eulerMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
var pitch, roll, yaw;
// vrtenje sinusoidiziramo, da ni preskokov
pitch = msg[1].sin.linlin(-pi, pi, 0, 1);
roll = msg[2].sin.linlin(-pi, pi, 0, 1);
yaw = msg[3].sin.linlin(-pi, pi, 0, 1);
switch (id,
3, {
// Quick slots 1-3
~sendMidi.value(0, 16, (pitch * 127));
},
4, {
~sendMidi.value(0, 17, (pitch * 127));
}
);
}, "/euler/" ++ id);
OSCdef.new((\accMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
// Pospeski: gremo od 0 ali iz sredine?
var accX, accY, accZ, accSum;
accX = msg[1].linlin(-50, 50, 0, 1);
accY = msg[2].linlin(-50, 50, 0, 1);
accZ = msg[3].linlin(-50, 50, 0, 1);
accSum = msg[4].linlin(-50, 50, 0, 1);
accSum = accSum - 0.5;
switch (id,
4, {
2024-09-26 19:40:14 +02:00
//~sendMidi.value(0, 18, (accSum * 256).floor);
}
);
}, "/acc/" ++ id);
});
)
// MIDI MAP IV (II)
(
2024-09-26 19:40:14 +02:00
~map = "IV (2)";
"MIDI MAP IV (II) !!!".postln;
~senzorji.keys.do({ |id|
OSCdef.new((\eulerMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
var pitch, roll, yaw;
// vrtenje sinusoidiziramo, da ni preskokov
pitch = msg[1].sin.linlin(-pi, pi, 0, 1);
roll = msg[2].sin.linlin(-pi, pi, 0, 1);
yaw = msg[3].sin.linlin(-pi, pi, 0, 1);
// MORPHING EFEKT
switch (id,
4, {
// Quick slots 1-3
2024-09-26 19:40:14 +02:00
~sendMidi.value(0, 16, -10 + (yaw * 150));
},
3, {
2024-09-26 19:40:14 +02:00
~sendMidi.value(0, 17, (roll * 150));
}
);
}, "/euler/" ++ id);
OSCdef.new((\accMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
// Pospeski: gremo od 0 ali iz sredine?
var accX, accY, accZ, accSum;
accX = msg[1].linlin(-50, 50, 0, 1);
accY = msg[2].linlin(-50, 50, 0, 1);
accZ = msg[3].linlin(-50, 50, 0, 1);
accSum = msg[4].linlin(-50, 50, 0, 1);
/*
switch (id,
3, {
~sendMidi.value(0, 19, (accX * 127).floor);
}
);
*/
}, "/acc/" ++ id);
});
)
(
2024-09-26 19:40:14 +02:00
~map = "V (3)";
"MIDI MAP V (3)".postln;
~senzorji.keys.do({ |id|
OSCdef.new((\eulerMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
var pitch, roll, yaw;
// vrtenje sinusoidiziramo, da ni preskokov
pitch = msg[1].sin.linlin(-pi, pi, 0, 1);
roll = msg[2].sin.linlin(-pi, pi, 0, 1);
yaw = msg[3].sin.linlin(-pi, pi, 0, 1);
// MORPHING EFEKT
switch (id,
4, {
// Quick slots 1-3
~sendMidi.value(0, 16, (-15 + (yaw * 150)).floor);
},
3, {
~sendMidi.value(0, 17, (-15 + (roll * 150).floor));
}
);
}, "/euler/" ++ id);
OSCdef.new((\accMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
// Pospeski: gremo od 0 ali iz sredine?
var accX, accY, accZ, accSum;
accX = msg[1].linlin(-50, 50, 0, 1);
accY = msg[2].linlin(-50, 50, 0, 1);
accZ = msg[3].linlin(-50, 50, 0, 1);
accSum = msg[4].linlin(-50, 50, 0, 1);
/*
switch (id,
3, {
~sendMidi.value(0, 19, (accX * 127).floor);
~sendMidi.value(0, 20, (accY * 127).floor);
~sendMidi.value(0, 21, (accZ * 127).floor);
}
);
*/
}, "/acc/" ++ id);
});
)
(
2024-09-26 19:40:14 +02:00
~map = "VI (3)";
"MIDI MAP VI (3) !!!".postln;
~senzorji.keys.do({ |id|
OSCdef.new((\eulerMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
var pitch, roll, yaw;
// vrtenje sinusoidiziramo, da ni preskokov
pitch = msg[1].sin.linlin(-pi, pi, 0, 1);
roll = msg[2].sin.linlin(-pi, pi, 0, 1);
yaw = msg[3].sin.linlin(-pi, pi, 0, 1);
switch (id,
3, {
// Quick slots 1-3
~sendMidi.value(0, 16, (pitch * 127).floor);
~sendMidi.value(0, 17, (yaw * 127).floor);
}
);
}, "/euler/" ++ id);
OSCdef.new((\accMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
// Pospeski: gremo od 0 ali iz sredine?
var accX, accY, accZ, accSum;
accX = msg[1].linlin(-50, 50, 0, 1);
accY = msg[2].linlin(-50, 50, 0, 1);
accZ = msg[3].linlin(-50, 50, 0, 1);
accSum = msg[4].linlin(-50, 50, 0, 1);
accSum = accSum - 0.5;
switch (id,
4, {
//~sendMidi.value(0, 18, (accSum * 200).floor);
}
);
}, "/acc/" ++ id);
});
)
(
"MIDI MAP VII (2)".postln;
~senzorji.keys.do({ |id|
OSCdef.new((\eulerMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
var pitch, roll, yaw;
// vrtenje sinusoidiziramo, da ni preskokov
pitch = msg[1].sin.linlin(-pi, pi, 0, 1);
roll = msg[2].sin.linlin(-pi, pi, 0, 1);
yaw = msg[3].sin.linlin(-pi, pi, 0, 1);
// BITCRUSH EFEKT
switch (id,
4, {
// Quick slots 1-3
2024-09-26 19:40:14 +02:00
~sendMidi.value(0, 16, (-10 + (yaw * 150)).floor);
},
3, {
2024-09-26 19:40:14 +02:00
~sendMidi.value(0, 17, (-25 + (roll * 150).floor));
}
);
}, "/euler/" ++ id);
OSCdef.new((\accMIDI ++ id).asSymbol, { |msg, time, addr, recvPort|
// Pospeski: gremo od 0 ali iz sredine?
var accX, accY, accZ, accSum;
accX = msg[1].abs.linlin(-50, 50, 0, 1);
accY = msg[2].abs.linlin(0, 50, 0, 1);
accZ = msg[3].abs.linlin(0, 50, 0, 1);
accSum = msg[4].linlin(0, 50, 0, 1);
switch (id,
2024-09-26 19:40:14 +02:00
1, {
/*
~sendMidi.value(0, 16, 40 + (accY * 150));
~sendMidi.value(0, 17, 40 + (accZ * 150));
*/
}
);
}, "/acc/" ++ id);
});
)
// VDMX mapping setup za simona - dedicated controls
(
~senzorji.keys.do({|id|
~oscS.sendMsg("/senzor/" ++ id ++ "/pitch", 0.5);
~oscS.sendMsg("/senzor/" ++ id ++ "/roll", 0.5);
~oscS.sendMsg("/senzor/" ++ id ++ "/yaw", 0.5);
~oscS.sendMsg("/senzor/" ++ id ++ "/accX", 0.5);
~oscS.sendMsg("/senzor/" ++ id ++ "/accY", 0.5);
~oscS.sendMsg("/senzor/" ++ id ++ "/accZ", 0.5);
~oscS.sendMsg("/senzor/" ++ id ++ "/accSum", 0.5);
});
)