aboutsummaryrefslogtreecommitdiff
path: root/lib/Engine_Rhodes.sc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Engine_Rhodes.sc')
-rw-r--r--lib/Engine_Rhodes.sc61
1 files changed, 58 insertions, 3 deletions
diff --git a/lib/Engine_Rhodes.sc b/lib/Engine_Rhodes.sc
index ad55cd3..a644c96 100644
--- a/lib/Engine_Rhodes.sc
+++ b/lib/Engine_Rhodes.sc
@@ -4,6 +4,10 @@
Engine_Rhodes : CroneEngine {
var <notes;
+ var <lfoSpeed;
+ var <lfoDepth;
+ var <modIndex;
+ var <mix;
*new { arg context, doneCallback;
^super.new(context, doneCallback);
@@ -22,7 +26,6 @@ Engine_Rhodes : CroneEngine {
|
var env1, env2, env3, env4;
var osc1, osc2, osc3, osc4, snd;
- lfoSpeed = lfoSpeed * 12;
freq = freq * 2;
env1 = EnvGen.ar(Env.adsr(0.001, 1.25, 0.0, 0.04, curve: \lin));
@@ -37,7 +40,7 @@ Engine_Rhodes : CroneEngine {
snd = Mix((osc3 * (1 - mix)) + (osc1 * mix));
snd = snd * (SinOsc.ar(lfoSpeed) * lfoDepth + 1);
- snd = snd * EnvGen.ar(Env.asr(0, 1, 0.2));
+ snd = snd * EnvGen.ar(Env.asr(0, 1, 0.25), gate);
snd = Pan2.ar(snd, pan, amp);
DetectSilence.ar(snd, doneAction: Done.freeSelf);
Out.ar(out, snd);
@@ -45,6 +48,10 @@ Engine_Rhodes : CroneEngine {
});
}
alloc {
+ lfoSpeed = 2.0;
+ lfoDepth = 0.1;
+ modIndex = 0.1;
+ mix = 0.2;
notes = nil!128;
this.addCommand("note_on", "ii", {
arg msg;
@@ -55,7 +62,11 @@ Engine_Rhodes : CroneEngine {
[
\out, context.out_b,
\freq, note.midicps,
- \vel, vel/127.0
+ \vel, vel/127.0,
+ \lfoSpeed, lfoSpeed,
+ \modIndex, modIndex,
+ \lfoDepth, lfoDepth,
+ \mix, mix
],
target: context.xg);
}
@@ -69,6 +80,50 @@ Engine_Rhodes : CroneEngine {
notes[note] = nil;
}
});
+ this.addCommand("set_lfo_speed", "f", {
+ arg msg;
+ lfoSpeed = msg[1];
+ // there has to be a better way to do this
+ for (0, 128, {
+ arg i;
+ if (notes[i].notNil) {
+ notes[i].set(\lfoSpeed, msg[1]);
+ }
+ })
+ });
+ this.addCommand("set_lfo_depth", "f", {
+ arg msg;
+ lfoDepth = msg[1];
+ // there has to be a better way to do this
+ for (0, 128, {
+ arg i;
+ if (notes[i].notNil) {
+ notes[i].set(\lfoDepth, msg[1]);
+ }
+ })
+ });
+ this.addCommand("set_mod_index", "f", {
+ arg msg;
+ modIndex = msg[1];
+ // there has to be a better way to do this
+ for (0, 128, {
+ arg i;
+ if (notes[i].notNil) {
+ notes[i].set(\modIndex, msg[1]);
+ }
+ })
+ });
+ this.addCommand("set_mix", "f", {
+ arg msg;
+ mix = msg[1];
+ // there has to be a better way to do this
+ for (0, 128, {
+ arg i;
+ if (notes[i].notNil) {
+ notes[i].set(\mix, msg[1]);
+ }
+ })
+ });
}
free {
}