You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.5 KiB
Plaintext
77 lines
1.5 KiB
Plaintext
(
|
|
SynthDef(\pad, {
|
|
arg amp = 0.3, freq = 440, octave = 0, gate = 0;
|
|
var sig, osc1, osc2, env, lfo, noise;
|
|
|
|
freq = freq * (2 ** octave);
|
|
|
|
osc1 = LFSaw.ar(freq + 1.01) * 2;
|
|
osc2 = SawDPW.ar(freq + 0.99) * 3;
|
|
noise = WhiteNoise.ar(2);
|
|
|
|
lfo = SinOsc.kr(3.1).range(0.5, 1.5);
|
|
|
|
sig = osc1 + osc2;
|
|
sig = RLPF.ar(sig, 800 * lfo);
|
|
// sig = BPF.ar(sig, 40 * lfo, 0.8);
|
|
|
|
env = EnvGen.ar(Env.adsr(attackTime: 0.3, decayTime: 0.5, sustainLevel: 0.2, releaseTime: 0.05), gate, doneAction: 2);
|
|
// env = EnvGen.kr(Env.adsr(0.2, 3, 1, 1), gate, doneAction: 2);
|
|
|
|
// sig = CombL.ar(sig, 0.2, 0.2, 1.0);
|
|
// sig = DiodeRingMod.ar(sig);
|
|
|
|
// sig = sig.blend(GVerb.ar(sig, 299, 4), 0.15);
|
|
// sig = sig.blend(GVerb.ar(sig.sum, 299, 4), 0.15);
|
|
|
|
sig = CombL.ar(sig, 0.5, 1/[36.7, 37.3], 1, 0.2);
|
|
|
|
// sig = sig.blend(PF.ar(sig, 1500, 0.5), 0.9);
|
|
|
|
// Ideas
|
|
// chorusing (through J Concepts arrays), reverb, spatialization, distortion. See: Presence by Basic Channel
|
|
// dub echo
|
|
// band pan -- what was that AFX demo rack effect?
|
|
// multi-band strum
|
|
|
|
sig = sig!2 * amp * env;
|
|
|
|
Out.ar(0, sig);
|
|
}).add;
|
|
)
|
|
|
|
x = Synth(\pad, [\freq, 60.midicps]);
|
|
|
|
|
|
MIDIClient.init;
|
|
MIDIIn.connectAll;
|
|
|
|
|
|
(
|
|
|
|
~notes = Array.newClear(128);
|
|
|
|
// MIDI
|
|
|
|
MIDIdef.noteOn(\noteOnTest, {
|
|
arg vel, nn, chan, src;
|
|
// [vel, nn].postln;
|
|
~notes[nn] = Synth.new(
|
|
\pad,
|
|
[
|
|
\freq, nn.midicps,
|
|
\amp, vel.linexp(1,127,0.01,0.3),
|
|
\gate, 1,
|
|
\octave, 0
|
|
]
|
|
);
|
|
});
|
|
|
|
MIDIdef.noteOff(\noteOffTest, {
|
|
arg vel, nn;
|
|
// [vel, nn].postln;
|
|
~notes[nn].set(\gate, 0);
|
|
~notes[nn] = nil;
|
|
});
|
|
)
|