Skip to content

Instantly share code, notes, and snippets.

@umbrellaprocess
Last active December 16, 2021 08:53
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save umbrellaprocess/973d2aa16e95bf329ee2 to your computer and use it in GitHub Desktop.
Save umbrellaprocess/973d2aa16e95bf329ee2 to your computer and use it in GitHub Desktop.
A simple example of MIDI Keyboard for SuperCollider 3.6.x
/**
* A simple example of MIDI Keyboard for SuperCollider 3.6.x
*/
MIDIIn.connect;
s.boot;
(
SynthDef("umbSinewave",{
arg freq=440, gate=1, amp=1, pan=0;
var x;
x = SinOsc.ar(freq, 0, amp);
x = EnvGen.kr(Env.adsr(0.01,0.3,0.5,1,0.6,-4),gate,doneAction: 2) * x;
Out.ar(0, Pan2.ar(x,pan));
}).add;
)
(
var keys;
keys = Array.newClear(128);
~noteOnFunc = {arg src, chan, num, vel;
var node;
node = keys.at(num);
if (node.notNil, {
node.release;
keys.put(num, nil);
});
node = Synth.tail(nil, "umbSinewave", [\freq, num.midicps, \amp, vel/127]);
keys.put(num, node);
[chan,num,vel/127].postln;
};
MIDIIn.addFuncTo(\noteOn, ~noteOnFunc);
~noteOffFunc = {arg src, chan, num, vel;
var node;
node = keys.at(num);
if (node.notNil, {
node.release;
keys.put(num, nil);
});
};
MIDIIn.addFuncTo(\noteOff, ~noteOffFunc);
)
// cleanup
(
MIDIIn.removeFuncFrom(\noteOn, ~noteOnFunc);
MIDIIn.removeFuncFrom(\noteOff, ~noteOffFunc);
)
@umbrellaprocess
Copy link
Author

@sutyrin Please feel free to make a fork and rename what you want

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment