initial commit
This commit is contained in:
3
README.md
Normal file
3
README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Scoobidules
|
||||
|
||||
A collection of snippets, patches, classes and hybrid SuperCollider bidules
|
||||
4
bitcrushing.scd
Normal file
4
bitcrushing.scd
Normal file
@ -0,0 +1,4 @@
|
||||
// bitcrushing
|
||||
sig = sig.round(0.12);
|
||||
// sample rate reduction
|
||||
sig = Latch.ar(sig, Impulse.ar(SampleRate.ir/10));
|
||||
72
choir.scd
Normal file
72
choir.scd
Normal file
@ -0,0 +1,72 @@
|
||||
// create a choir from two formants
|
||||
(
|
||||
|
||||
// https://en.wikipedia.org/wiki/Formant#cite_note-7
|
||||
var formants = [
|
||||
[360, 640], // o
|
||||
[235, 2100], // y
|
||||
[390, 2300], // e
|
||||
[585, 1710], // æ
|
||||
[850, 1610], // a
|
||||
[750, 940], // ɑ
|
||||
[820, 1530], // ɶ
|
||||
[600, 1170], // ʌ
|
||||
[250, 595], // u
|
||||
[240, 2400], // i
|
||||
];
|
||||
|
||||
SynthDef(\formoo, {
|
||||
arg formants = #[850, 1610];
|
||||
var sig, env;
|
||||
env = Env.perc(\attack.kr(0), \decay.kr(1)).ar(Done.freeSelf);
|
||||
sig = 10.collect{
|
||||
var octave = [1, 2, 0.5, 1.5];
|
||||
// base freq * octave * detuning over time
|
||||
// sounds like a chorus fx
|
||||
var voice = Saw.ar(\freq.kr(220) * LFNoise2.kr(3).linlin(-1, 1, 0.99, 1.1) * octave.choose);
|
||||
// formant * detuning; very high resonance
|
||||
voice = RLPF.ar(
|
||||
voice,
|
||||
formants *
|
||||
formants.size.collect{
|
||||
LFNoise2.kr(3).linlin(-1, 1, 0.98, 1.05)
|
||||
}, 0.05).sum;
|
||||
// detune and blur some more
|
||||
voice = voice + PitchShift.ar(voice, {Rand(0.01, 0.1)}, 0.98) * 0.5;
|
||||
// a bit of distortion
|
||||
voice = voice.softclip;
|
||||
};
|
||||
sig = Splay.ar(sig);
|
||||
// narrowing the spectrum a little more
|
||||
sig = RLPF.ar(
|
||||
sig,
|
||||
\ff.kr(4700) *
|
||||
LFNoise2.kr(1).linlin(-1, 1, 0.95, 1.05),
|
||||
\qr.kr(0.9)
|
||||
);
|
||||
sig = sig * env;
|
||||
sig = sig * \amp.kr(0.25);
|
||||
sig = Limiter.ar(sig);
|
||||
Out.ar(\out.kr(0), sig);
|
||||
}).add;
|
||||
)
|
||||
|
||||
// example
|
||||
(
|
||||
r {
|
||||
[38 + 3, 38 +5, 38 + 12].do{
|
||||
|freq|
|
||||
Synth(\formoo,
|
||||
[
|
||||
amp: 0.15,
|
||||
attack: 2,
|
||||
decay: 5,
|
||||
freq: freq.midicps,
|
||||
formants: [850, 1610],
|
||||
ff: rrand(550, 2660),
|
||||
qr: 0.5
|
||||
]
|
||||
);
|
||||
}
|
||||
}.play;
|
||||
)
|
||||
5
chorus.scd
Normal file
5
chorus.scd
Normal file
@ -0,0 +1,5 @@
|
||||
sig = 8.collect({
|
||||
var mod = LFTri.kr(ExpRand(0.2, 0.3), Rand(0.0, 2.0)).range(0.001, 0.02);
|
||||
DelayL.ar(sig, 0.02, mod);
|
||||
});
|
||||
sig = Splay.ar(sig, 0.2);
|
||||
36
extensions/Track/classes/fadable.sc
Normal file
36
extensions/Track/classes/fadable.sc
Normal file
@ -0,0 +1,36 @@
|
||||
// object provides fading ability and levels
|
||||
Fadable {
|
||||
var track, level;
|
||||
fade {
|
||||
// exponential fading level toward <target> during <time> seconds
|
||||
// TODO: what if another fade routine is ongoing? => mischief
|
||||
|target, time|
|
||||
r {
|
||||
var rate = 1 / time * 0.05;
|
||||
while({((level - target).abs >= 0.01 )}, {
|
||||
if(
|
||||
(level >= target),
|
||||
{
|
||||
// fade out
|
||||
level = level - (rate.exp - 1);
|
||||
if((level < target), { level = target; });
|
||||
},
|
||||
{
|
||||
// fade in
|
||||
level = level + (rate.exp - 1);
|
||||
if((level > target), { level = target; });
|
||||
});
|
||||
0.05.wait;
|
||||
track.set(\amp, level);
|
||||
});
|
||||
}.play;
|
||||
}
|
||||
|
||||
level_ {
|
||||
|amp|
|
||||
level = amp;
|
||||
track.set(\amp, level);
|
||||
^this
|
||||
// ("Amplitude in set to " << amp << "sec").postln;
|
||||
}
|
||||
}
|
||||
42
extensions/Track/classes/mixer.sc
Normal file
42
extensions/Track/classes/mixer.sc
Normal file
@ -0,0 +1,42 @@
|
||||
// bidule holding a master track receiving from a bus, and a collection
|
||||
// of Tracks
|
||||
Mixer : Fadable {
|
||||
var name, master, masterBus, tracks, track, level;
|
||||
|
||||
*new {
|
||||
|mixerName|
|
||||
^super.new.init(mixerName);
|
||||
}
|
||||
|
||||
*initClass {
|
||||
StartUp.add {
|
||||
SynthDef(\master, {
|
||||
|in|
|
||||
var sig, releaser;
|
||||
sig = In.ar(in, 2) * \amp.kr(0.5);
|
||||
sig = Limiter.ar(sig);
|
||||
Out.ar(0, sig);
|
||||
}).add;
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
|mixerName|
|
||||
name = mixerName;
|
||||
level = 1;
|
||||
masterBus = Bus.audio(Server.default, 2);
|
||||
track = Synth(\master, [in: masterBus.index, amp: level]);
|
||||
tracks = Dictionary();
|
||||
}
|
||||
|
||||
addTrack {
|
||||
|trackName|
|
||||
tracks.put(trackName, Track(masterBus.index));
|
||||
}
|
||||
|
||||
// access tracks like if Mixer was a dict
|
||||
at {
|
||||
|name|
|
||||
^tracks[name]
|
||||
}
|
||||
}
|
||||
64
extensions/Track/classes/track.sc
Normal file
64
extensions/Track/classes/track.sc
Normal file
@ -0,0 +1,64 @@
|
||||
// A track receiving from a bus. Synth and FX in their own groups
|
||||
Track : Fadable {
|
||||
/*
|
||||
TODO: don't instanciate if name already exist ?
|
||||
*/
|
||||
var out, <group, <groupFX, <groupSynth, <track, busTrack, busFX, level;
|
||||
|
||||
*new {
|
||||
|out|
|
||||
^super.new.init(out);
|
||||
}
|
||||
|
||||
*initClass {
|
||||
StartUp.add {
|
||||
SynthDef(\fader, {
|
||||
|in, fxIn, out|
|
||||
var sig, fx, dry, wet;
|
||||
wet = \wet.kr(1);
|
||||
// TODO: what if i want 1 or 12 channels
|
||||
sig = In.ar(in, 2);
|
||||
fx = In.ar(fxIn, 2);
|
||||
// FX loop?
|
||||
dry = (1 - wet).clip(0, 1);
|
||||
sig = [sig * dry, fx * wet].sum;
|
||||
sig = Pan2.ar(sig, \pan.kr(0));
|
||||
sig = sig * \amp.kr(1);
|
||||
sig = Limiter.ar(sig);
|
||||
Out.ar(out, sig);
|
||||
}).add;
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
|out|
|
||||
level = 1;
|
||||
busTrack = Bus.audio(Server.default, 2);
|
||||
busFX = Bus.audio(Server.default, 2);
|
||||
group = Group.new(Server.default);
|
||||
groupSynth = Group.head(group);
|
||||
groupFX = Group.after(groupSynth);
|
||||
track = Synth(
|
||||
\fader,
|
||||
[
|
||||
in: busTrack.index,
|
||||
fxIn: busFX.index,
|
||||
out: out
|
||||
],
|
||||
target: group,
|
||||
addAction: \addToTail
|
||||
);
|
||||
}
|
||||
|
||||
in {
|
||||
^busTrack.index;
|
||||
}
|
||||
|
||||
inFX {
|
||||
^busFX.index;
|
||||
}
|
||||
|
||||
// printOn {
|
||||
// |stream|
|
||||
// }
|
||||
}
|
||||
1
flanger.scd
Normal file
1
flanger.scd
Normal file
@ -0,0 +1 @@
|
||||
sig = CombC.ar(sig, 0.1, SinOsc.ar(0.1).linlin(-1, 1, 0.009, 0.015), 0.1);
|
||||
20
fx_chain1.scd
Normal file
20
fx_chain1.scd
Normal file
@ -0,0 +1,20 @@
|
||||
SynthDef(\fx, {
|
||||
var sig, lag;
|
||||
sig = In.ar(\in.kr(0), 2);
|
||||
// chorus
|
||||
sig = 8.collect({
|
||||
var mod = LFTri.kr(ExpRand(0.2, 0.3), Rand(0.0, 4.0)).range(0.001, 0.02);
|
||||
DelayL.ar(sig, 0.02, mod);
|
||||
});
|
||||
sig = Splay.ar(sig, 0.2);
|
||||
// flanger
|
||||
sig = DelayL.ar(sig, 0.1, SinOsc.ar(0.04).linlin(-1, 1, 0.009, 0.015));
|
||||
sig = Splay.ar(sig);
|
||||
// reverb
|
||||
sig = [sig, JPverb.ar(sig, 2, 0.3, 0.5)].sum;
|
||||
sig = Pan2.ar(sig, \pan.kr(0));
|
||||
sig = sig * \rwet.kr(1);
|
||||
// sig = Normalizer.ar(sig, 0.3);
|
||||
sig = Limiter.ar(sig);
|
||||
ReplaceOut.ar(\out.kr(0), sig);
|
||||
}).add;
|
||||
20
granulator.scd
Normal file
20
granulator.scd
Normal file
@ -0,0 +1,20 @@
|
||||
/* Generic modulable buffer granulator */
|
||||
(
|
||||
SynthDef(\grainoo, {
|
||||
|buf|
|
||||
var sig;
|
||||
sig = GrainBuf.ar(
|
||||
numChannels: 2,
|
||||
trigger: Impulse.ar(\trig_rate.kr(20)),
|
||||
dur: \gdur.kr(0.5),
|
||||
sndbuf: buf,
|
||||
pos: \gpos.kr(0),
|
||||
rate: \rate.kr(0.5).lag(1),
|
||||
);
|
||||
sig = RLPF.ar(sig, \ff.kr(6000), \rq.kr(1));
|
||||
sig = Pan2.ar(sig, LFNoise0.ar(0.5));
|
||||
sig = sig * \amp.kr(1);
|
||||
sig = Limiter.ar(sig);
|
||||
Out.ar(\out.kr(0), sig);
|
||||
}).add;
|
||||
)
|
||||
16
hatgen.scd
Normal file
16
hatgen.scd
Normal file
@ -0,0 +1,16 @@
|
||||
(
|
||||
SynthDef(\hhgen, {
|
||||
var sig;
|
||||
sig = Pulse.ar(Array.fill(6, {arg i; \freq.kr(20) * (i + {Rand(1.02, 1.03)})}));
|
||||
sig = Mix.ar(sig);
|
||||
sig = BPF.ar(sig, 10000, 0.15);
|
||||
sig = HPF.ar(sig, 7000);
|
||||
sig = LPF.ar(sig, 3700);
|
||||
sig = HPF.ar(sig, \ff.kr(1500)) * 20.dbamp;
|
||||
sig = sig * Env.perc(0.001, \decay.kr(0.1), curve: \curve.kr(-4)).ar(Done.freeSelf);
|
||||
sig = Pan2.ar(sig, \pan.kr(0));
|
||||
Out.ar(\out.kr(0), sig!2);
|
||||
}).add;
|
||||
)
|
||||
|
||||
// Synth(\hhgen, [freq: 60, decay: 0.1, ff: 6000]);
|
||||
15
hihat_simple.scd
Normal file
15
hihat_simple.scd
Normal file
@ -0,0 +1,15 @@
|
||||
(
|
||||
SynthDef(\hat, {
|
||||
var sig;
|
||||
sig = Pulse.ar(Array.fill(6, {|index| 120 * (index + {Rand(1.05, 1.15)})}));
|
||||
sig = Splay.ar(sig, 0.1);
|
||||
sig = BPF.ar(sig, 10000, 0.1);
|
||||
sig = RHPF.ar(sig, 7000, 0.1);
|
||||
sig = HPF.ar(sig, 5000) * 10.dbamp;
|
||||
sig = Fold.ar(sig);
|
||||
sig = sig * Env.perc(0.001, \decay.kr(0.1), curve: -8).ar(Done.freeSelf);
|
||||
sig = sig * \amp.kr(0.8);
|
||||
sig = Limiter.ar(sig);
|
||||
Out.ar(0, sig);
|
||||
}).add;
|
||||
)
|
||||
22
kickgen.scd
Normal file
22
kickgen.scd
Normal file
@ -0,0 +1,22 @@
|
||||
(
|
||||
SynthDef(\kickgen, {
|
||||
var curve, sig, envAmp, envPitch, noise, decay;
|
||||
decay = \decay.kr(0.3);
|
||||
curve = \curve.kr(-8);
|
||||
envPitch = 1 + (\envmul.kr(4) * Env.perc(0.001, 0.13, curve: curve).ar);
|
||||
envAmp = Env.perc(0.001, decay, curve: curve).ar(Done.freeSelf);
|
||||
noise = BPF.ar(WhiteNoise.ar * Env.perc(0.001, 0.01).ar, \ff.kr(1800), \rq.kr(1));
|
||||
sig = SinOsc.ar(\freq.kr(50) * envPitch) * envAmp;
|
||||
sig = sig + noise;
|
||||
// what happens here
|
||||
sig = (sig * (1 + (2 * Env.perc(0.001, 0.12).ar))).softclip;
|
||||
// sig = sig.softclip;
|
||||
// sig = sig * -4.dbamp;
|
||||
sig = sig * \amp.kr(0.8);
|
||||
sig = Pan2.ar(sig, \pan.kr(0));
|
||||
Out.ar(\out.kr(0), sig);
|
||||
}
|
||||
).add;
|
||||
)
|
||||
|
||||
// Synth(\kickgen, [freq: 50, decay: 4, curve:-8, ff: 9800, envmul: 8, amp:1]);
|
||||
8
main_routine.scd
Normal file
8
main_routine.scd
Normal file
@ -0,0 +1,8 @@
|
||||
r{
|
||||
loop {
|
||||
s.bind {
|
||||
// synth goes here
|
||||
}
|
||||
}
|
||||
exprand(0.1, 1).wait;
|
||||
};
|
||||
41
master_fx_bus.scd
Normal file
41
master_fx_bus.scd
Normal file
@ -0,0 +1,41 @@
|
||||
(
|
||||
// example effect chains
|
||||
SynthDef(\fx, {
|
||||
arg in;
|
||||
var sig, fx, releaser;
|
||||
sig = In.ar(in, 2);
|
||||
fx = sig.copy;
|
||||
fx = DelayL.ar(fx, 2, TRand.kr(0.25, \maxRelease.kr(2) / 3));
|
||||
fx = GVerb.ar(fx, 250);
|
||||
fx = LPF.ar(fx, 900);
|
||||
sig = (sig + fx) * 0.5;
|
||||
releaser = DetectSilence.ar(fx, doneAction: Done.freeSelf);
|
||||
OffsetOut.ar(\out.kr(0), sig);
|
||||
}).add;
|
||||
|
||||
// master channel with limiter
|
||||
SynthDef(\master, {
|
||||
arg in;
|
||||
var sig, releaser;
|
||||
sig = In.ar(in, 2);
|
||||
sig = Limiter.ar(sig, -6.dbamp);
|
||||
// releaser = DetectSilence.ar(sig, doneAction: Done.freeSelf);
|
||||
OffsetOut.ar(\out.kr(0), sig);
|
||||
}).add;
|
||||
)
|
||||
|
||||
(
|
||||
var fx, fxBus, master, masterBus;
|
||||
|
||||
// audio bus transmitting sound signal to synths below
|
||||
fxBus = Bus.audio(Server.default, 2);
|
||||
masterBus = Bus.audio(Server.default, 2);
|
||||
|
||||
// fx channel. output to master bus
|
||||
fx = Synth.new(\fx, [\in, fxBus.index, \out, masterBus.index], Server.default, \addToTail);
|
||||
|
||||
// master channel. output to default audio out
|
||||
master = Synth.new(\master, [\in, masterBus.index], Server.default, \addToTail);
|
||||
|
||||
/* sequences or routines go there */
|
||||
)
|
||||
27
midi_in_gate.scd
Normal file
27
midi_in_gate.scd
Normal file
@ -0,0 +1,27 @@
|
||||
(
|
||||
MIDIClient.init;
|
||||
MIDIIn.connectAll;
|
||||
|
||||
MIDIFunc.trace(true);
|
||||
)
|
||||
|
||||
(
|
||||
~synths = Array.fill(127, nil);
|
||||
MIDIdef.noteOn(\on, {
|
||||
arg val, num, chan,src;
|
||||
if(~synths[num] == nil, { // To be absolutely save
|
||||
~synths[num] = Synth(\supersaw, [
|
||||
\amp, 0.1,
|
||||
\freq, num.midicps,
|
||||
\harm, exprand(4,20)]);
|
||||
});
|
||||
});
|
||||
|
||||
MIDIdef.noteOff(\off, {
|
||||
arg val, num, chan,src;
|
||||
if(~synths[num] != nil, { // To be absolutely safe
|
||||
~synths[num].set(\gate, 0);
|
||||
~synths[num] = nil; // Remove the reference
|
||||
});
|
||||
});
|
||||
)
|
||||
48
pad.scd
Normal file
48
pad.scd
Normal file
@ -0,0 +1,48 @@
|
||||
2.midiratio
|
||||
(
|
||||
SynthDef(\pad, {
|
||||
arg freq = 440, gate = 1;
|
||||
var env, rel, sig, sig2, detuner1, detuner2;
|
||||
rel = \rel.kr(1);
|
||||
env = EnvGen.ar(Env.asr(1.2, 0.5, 3), gate, doneAction: Done.freeSelf);
|
||||
// this is the key part: several oscillators in UNISON, here using a noise ugen
|
||||
sig = LFSaw.ar((-5..5).collect({|i| freq + i}), LFTri.kr(0.05).range(1, 2));
|
||||
sig = Splay.ar(sig, 0.1);
|
||||
sig = RLPF.ar(sig, [3000, 2000, 1250, 600] * LFNoise2.kr(1).range(0.5, 1.2), 0.4);
|
||||
sig = Splay.ar(sig, 0.1);
|
||||
sig = HPF.ar(sig, 150);
|
||||
sig = sig * env;
|
||||
sig = sig * \amp.kr(1);
|
||||
Out.ar(\out.kr(0), Limiter.ar(sig));
|
||||
}).add;
|
||||
)
|
||||
|
||||
(
|
||||
MIDIClient.init;
|
||||
MIDIIn.connectAll;
|
||||
|
||||
MIDIFunc.trace(true);
|
||||
)
|
||||
|
||||
(
|
||||
~synths = Array.fill(127, nil);
|
||||
MIDIdef.noteOn(\on, {
|
||||
arg val, num, chan,src;
|
||||
if(~synths[num] == nil, { // To be absolutely save
|
||||
~synths[num] = Synth(\pad, [
|
||||
\amp, 0.5,
|
||||
\freq, num.midicps,
|
||||
\harm, exprand(4,20)]);
|
||||
});
|
||||
});
|
||||
|
||||
MIDIdef.noteOff(\off, {
|
||||
arg val, num, chan,src;
|
||||
if(~synths[num] != nil, { // To be absolutely safe
|
||||
~synths[num].set(\gate, 0);
|
||||
~synths[num] = nil; // Remove the reference
|
||||
});
|
||||
});
|
||||
)
|
||||
|
||||
(-10..10)
|
||||
12
random_lfo.scd
Normal file
12
random_lfo.scd
Normal file
@ -0,0 +1,12 @@
|
||||
(
|
||||
SynthDef(\randlfo, {
|
||||
var sig;
|
||||
sig = LFNoise0.ar(\rate.kr(1)).linlin(
|
||||
-1,
|
||||
1,
|
||||
\min.kr(0),
|
||||
\max.kr(1),
|
||||
);
|
||||
Out.ar(\out.kr(0), sig);
|
||||
}).add;
|
||||
)
|
||||
22
snare_physical_mod.scd
Normal file
22
snare_physical_mod.scd
Normal file
@ -0,0 +1,22 @@
|
||||
// https://bzoennchen.github.io/supercollider-book/chapters/sounddesign/physical-modeling.html
|
||||
|
||||
(
|
||||
SynthDef(\snare, {
|
||||
var sig, exciter, local;
|
||||
local = LocalIn.ar(2);
|
||||
exciter = Impulse.ar(0!2);
|
||||
sig = WhiteNoise.ar() * Decay2.ar(exciter, 0.008, 0.25) * \amp.kr(1.0);
|
||||
sig = sig + local;
|
||||
sig = BPF.ar(sig, \cutoff.kr(500));
|
||||
|
||||
local = DelayN.ar(sig, 0.01,
|
||||
delaytime: 1/\freq.kr(220)) * \beta.kr(0.8);
|
||||
LocalOut.ar(local);
|
||||
sig = LPF.ar(sig, 5000);
|
||||
// sig = JPverb.ar(sig, 0.6, 0.1);
|
||||
sig = sig + PitchShift.ar(sig, 0.01, 0.9);
|
||||
DetectSilence.ar(sig, doneAction: Done.freeSelf);
|
||||
sig = Limiter.ar(sig);
|
||||
Out.ar(0, sig);
|
||||
}).add;
|
||||
)
|
||||
18
supersaw.scd
Normal file
18
supersaw.scd
Normal file
@ -0,0 +1,18 @@
|
||||
(
|
||||
SynthDef(\supersaw, {
|
||||
arg gate = 0;
|
||||
var sig, env, freq, sub, noise, saw, rel;
|
||||
freq = \freq.kr(122);
|
||||
rel = \rel.kr(1);
|
||||
env = EnvGen.ar(Env.asr(\attack.kr(0.01), 1, rel), gate, doneAction: Done.freeSelf);
|
||||
sub = SinOsc.ar(freq) * 1.5;
|
||||
noise = WhiteNoise.ar(0.4);
|
||||
saw = Array.fill(8, {Saw.ar([freq, freq * 0.5] * Rand(1.0, 1.04)).sum});
|
||||
sig = Splay.ar([saw.sum, sub, noise], 0.1);
|
||||
sig = RHPF.ar(sig, freq, 0.9);
|
||||
// sig = sig + DelayC.ar(sig, 0.1, SinOsc.ar(0.02).unipolar.range(0.013, 0.025), 1) / 2;
|
||||
sig = sig * \amp.kr(0.3);
|
||||
sig = sig * env;
|
||||
Out.ar(\out.kr(0), Limiter.ar(sig));
|
||||
}).add;
|
||||
)
|
||||
19
tom_simple.scd
Normal file
19
tom_simple.scd
Normal file
@ -0,0 +1,19 @@
|
||||
(
|
||||
SynthDef(\tom, {
|
||||
var freq, decay, mod, sig, base, noise, vibrato, pitchEnv, ampEnv, filterEnv;
|
||||
freq = \freq.kr(120);
|
||||
decay = \decay.kr(1.6);
|
||||
ampEnv = Env.perc(0, decay).ar(Done.freeSelf);
|
||||
filterEnv = Env.perc(0, 0.15).ar;
|
||||
pitchEnv = Env.perc(0, 0.035).ar;
|
||||
noise = WhiteNoise.ar;
|
||||
base = SinOsc.ar(freq + (freq * pitchEnv) * [0.5, 1]).sum;
|
||||
sig = Splay.ar([base, noise], 0.1) * ampEnv * -2.dbamp;
|
||||
sig = RLPF.ar(sig, 200 + (\ff.kr(900) * filterEnv), 0.45);
|
||||
// sig = Fold.ar(sig, -0.6, 0.8);
|
||||
sig = sig + GVerb.ar(sig, 22, 1, 0.8) * -16.dbamp;
|
||||
Out.ar(\out.kr(0), sig * \amp.kr(1));
|
||||
}).add;
|
||||
)
|
||||
|
||||
Synth(\tom, [freq: 90, decay: 2]);
|
||||
Reference in New Issue
Block a user