MdaPiano Piano synthesiser
MdaPiano.ar(freq, gate, ... )
A piano synthesiser (originally a VST plugin by Paul Kellett, ported to SC by Dan Stowell). This UGen is not polyphonic (but can be retriggered to play notes in sequence). Note: This UGen is stereo - it returns two channels, with a stereo "wideness" effect controlled by the stereo argument. It has lots of parameters:
freq - Frequency of the note
gate - note-on occurs when gate goes from nonpositive to positive; note-off occurs when it goes from positive to nonpositive. Most of the other controls are only updated when a new note-on occurs.
vel - velocity (range is 0 to 127, default 100)
decay - The time for notes to decay after the initial strike (default 0.8)
release - The time for notes to decay after the key is released (default 0.8)
hard -
velhard -
muffle -
velmuff -
velcurve -
stereo - Width of the stereo effect (which makes low notes sound towards the left, high notes towards the right). 0 to 1.
tune - Overall tuning
random - Randomness in note tuning (default 0.1)
stretch - Stretches the tuning out (higher notes pushed higher)
sustain - If positive, act as if the piano's sustain pedal is pressed.
Examples
s.boot;
// This simple example triggers one note per second, monophonically:
(
x = {
MdaPiano.ar(
LFNoise0.kr(1).range(20, 60).round.midicps, // random note
stereo: 0.5,
gate: LFPulse.kr(1),
vel: LFPar.kr(0.1).range(10, 100), // varying velocity
mul: 0.2
)
}.play
)
x.free;
// Now let's define a piano synthdef:
(
SynthDef(\help_mdapiano, { |out=0, freq=440, gate=1|
var son = MdaPiano.ar(freq, gate, release: 0.9, stereo: 0.3, sustain: 0);
DetectSilence.ar(son, 0.01, doneAction:2);
Out.ar(out, son * 0.1);
}).memStore;
)
// Then we can use it in a pattern:
(
TempoClock.default.tempo = 1.2;
Ppar([
Pbind(
\instrument, \help_mdapiano,
\degree,
Pseq([
0, 7, -5, 7, 0, 5, -7, 5, -2, 5, -7, 5, -2, 3, -9, 3,
0, 7, -5, 7, 0, 5, -7, 5, -2, 5, -7, 5, -2, -3, -4, -5 ], inf),
\dur, 0.5,
\octave, 3,
\root, 3,
\vel, Prand([Pseq([100, 30, 50, 10]), Pseq([100, 30, 10, 10, 5, 10, 20, 30])], inf),
\legato, 0.95
),
Pbind(
\instrument, \help_mdapiano,
\degree,
Pseq([ \, 0, -1, 0, 2, 0, \, \, \, 0, -2, \, \, -2, -4, \, \ ], inf),
\dur, 0.5,
\octave, 6,
\root, 3,
\vel, Pwhite(50, 100, inf)
)
], inf).play
)
// Try changing the synthdef while this is running (e.g. activate sustain, tweak stereo)...