386 lines
9.7 KiB
Plaintext
386 lines
9.7 KiB
Plaintext
d = (); // This is a storage area for synthesizers
|
|
f = (); // This is a storage for various FX functions
|
|
|
|
(
|
|
d.params = { arg obj, name; obj[name].allControlNames.do({arg i; i.postln;}); };
|
|
d.list = { arg obj; obj.keys.do({arg i; i.postln}); };
|
|
);
|
|
|
|
(
|
|
z = SynthDef.new(\player, {
|
|
arg buf, out;
|
|
var sig, env = EnvGen.ar(Env.perc(\attack.kr(0.01), \release.kr(1)), doneAction: 2);
|
|
var startPos = \begin.kr(0) * BufFrames.kr(buf);
|
|
var endPos = \end.kr(1) * BufFrames.kr(buf); // TODO: unused
|
|
sig = PlayBuf.ar(
|
|
numChannels: 1,
|
|
bufnum: buf,
|
|
rate:BufRateScale.kr(buf) * (\rate.kr(1) * \freq.kr(400) / 60.midicps),
|
|
trigger: 1, startPos:startPos,
|
|
loop:\loop.kr(0), doneAction: 2);
|
|
sig = sig * \amp.kr(-6).dbamp;
|
|
sig = Pan2.ar(sig * env, \pan.kr(0.0));
|
|
OffsetOut.ar(out, sig)
|
|
}).add;
|
|
d.player = z;
|
|
);
|
|
|
|
/*
|
|
* Granular Sampler
|
|
*/
|
|
(
|
|
z = SynthDef('grainSampler', {
|
|
arg out, buf;
|
|
var sound = GrainBuf.ar(
|
|
numChannels: buf.numChannels,
|
|
trigger: Impulse.kr(\grain.kr(4)),
|
|
dur: 1, sndbuf: buf,
|
|
rate: \rate.kr(4),
|
|
pos: \pos.kr(0.0),
|
|
interp: 2,
|
|
pan: \pan.kr(0.0),
|
|
envbufnum: \env.kr(-1),
|
|
);
|
|
sound = sound * Env.perc(
|
|
\attack.kr(0.1), \release.kr(0.5)
|
|
).kr(2);
|
|
sound = sound * \amp.kr(-6).dbamp;
|
|
OffsetOut.ar(out, sound);
|
|
}).add;
|
|
d.grainSampler = z;
|
|
);
|
|
|
|
/*
|
|
* Stereo variant
|
|
*/
|
|
|
|
(
|
|
z = SynthDef.new(\splayer, {
|
|
arg buf, out;
|
|
var sig, env = EnvGen.ar(
|
|
Env.perc(
|
|
\attack.kr(0.01),
|
|
\release.kr(1)),
|
|
doneAction: 2
|
|
);
|
|
var startPos = \begin.kr(0) * BufFrames.kr(buf);
|
|
var endPos = \end.kr(1) * BufFrames.kr(buf); // TODO: unused
|
|
sig = PlayBuf.ar(
|
|
numChannels: 2,
|
|
bufnum: buf,
|
|
rate:BufRateScale.kr(buf) * (\rate.kr(1) * \freq.kr(400) / 60.midicps),
|
|
trigger: 1, startPos:startPos,
|
|
loop:\loop.kr(0), doneAction: 2);
|
|
sig = sig * \amp.kr(-6).dbamp;
|
|
sig = Pan2.ar(sig * env, \pan.kr(0.0));
|
|
OffsetOut.ar(out, sig)
|
|
}).add;
|
|
d.splayer = z;
|
|
);
|
|
|
|
|
|
(
|
|
/* Crafted with some help from Bruno Gola */
|
|
z = SynthDef(\looperMono,
|
|
{
|
|
arg out;
|
|
var sig, env, index;
|
|
index = Select.kr(\direction.kr(1) > 0, [\index.kr(0) + 1, \index.kr]);
|
|
sig = PlayBuf.ar(
|
|
1,
|
|
\buf.kr(0),
|
|
(BufRateScale.kr(\buf.kr) * (BufSamples.kr(\buf.kr)
|
|
/ \slices.kr(1) / BufSampleRate.kr(\buf.kr)) / \time.kr * \direction.kr) / 2,
|
|
1, BufSamples.kr(\buf.kr) * (index / \slices.kr), doneAction: 0
|
|
);
|
|
env = EnvGen.ar(
|
|
Env.asr(0.01, 1, 0.01), \gate.kr(1), doneAction: 2
|
|
);
|
|
sig = sig * env;
|
|
sig = sig * \amp.kr(-6).dbamp;
|
|
OffsetOut.ar(out,Pan2.ar(sig,\pan.kr(0)));
|
|
}).add;
|
|
d.looperMono = z;
|
|
);
|
|
|
|
(
|
|
/* Crafted with some help from Bruno Gola */
|
|
z = SynthDef(\looperStereo,
|
|
{
|
|
arg out;
|
|
var sig, env, index;
|
|
index = Select.kr(\direction.kr(1) > 0, [\index.kr(0) + 1, \index.kr]);
|
|
sig = PlayBuf.ar(
|
|
2,
|
|
\buf.kr(0),
|
|
(BufRateScale.kr(\buf.kr) * (BufSamples.kr(\buf.kr)
|
|
/ \slices.kr(1) / BufSampleRate.kr(\buf.kr)) / \time.kr * \direction.kr) / 2,
|
|
1, BufSamples.kr(\buf.kr) * (index / \slices.kr), doneAction: 0
|
|
);
|
|
env = EnvGen.ar(
|
|
Env.asr(0.01, 1, 0.01), \gate.kr(1), doneAction: 2
|
|
);
|
|
sig = sig * env;
|
|
sig = sig * \amp.kr(-6).dbamp;
|
|
OffsetOut.ar(out,Pan2.ar(sig,\pan.kr(0)));
|
|
}).add;
|
|
d.looperStereo = z;
|
|
);
|
|
|
|
(
|
|
z = SynthDef(\sinfb, {
|
|
arg out;
|
|
var sig, env;
|
|
env = EnvGen.ar(
|
|
Env.linen(
|
|
\attack.kr(0.01),
|
|
\sustain.kr(0),
|
|
\release.kr(1)
|
|
),1,1,0,1,2);
|
|
sig = SinOscFB.ar(
|
|
\freq.kr(400),
|
|
\fb.kr(0.5),
|
|
1
|
|
);
|
|
sig = sig * env;
|
|
OffsetOut.ar(out, Pan2.ar(sig, \pan.kr(0), \amp.kr(-6).dbamp));
|
|
}).add;
|
|
d.sinfb = z;
|
|
);
|
|
|
|
(
|
|
z = SynthDef(\omi, {
|
|
arg out;
|
|
var envLength = \sustain.kr(1) * (\end.kr(1) - \begin.kr(0)) / \speed.kr(1);
|
|
var line = Line.ar(\begin.kr, \end.kr, envLength, doneAction: Done.freeSelf);
|
|
var env = Env.asr;
|
|
var volume = IEnvGen.ar(env, line) * \amp.kr(-6).dbamp;
|
|
var sig;
|
|
sig = MiOmi.ar(pit: \freq.kr(400).cpsmidi);
|
|
OffsetOut.ar(out, Pan2.ar(sig * volume, \pan.kr(0)));
|
|
}).add;
|
|
d.omi = z;
|
|
);
|
|
|
|
|
|
(
|
|
[
|
|
'Panalog', 'Pwaveshape', 'Pfm', 'Pgrain',
|
|
'Padditive', 'Pwavetable', 'Pchord', 'Pspeech',
|
|
'Pswarm', 'Pnoise', 'Pparticle', 'Pstring',
|
|
'Pmodal', 'Pbass', 'Psnare', 'Phat'
|
|
].do({
|
|
arg name, index;
|
|
var synth;
|
|
synth = SynthDef(name, {
|
|
arg out;
|
|
var env = EnvGen.ar(
|
|
Env.perc(
|
|
\attack.kr(0.01),
|
|
\release.kr(1)
|
|
),
|
|
doneAction: Done.freeSelf
|
|
);
|
|
var sig;
|
|
sig = MiPlaits.ar(
|
|
pitch: \freq.kr(400).cpsmidi,
|
|
timbre: \timbre.kr(0.5),
|
|
harm: \harm.kr(0.5),
|
|
engine: index,
|
|
morph: \morph.kr(0.5),
|
|
level: \level.kr(1),
|
|
decay: \lpgdecay.kr(0),
|
|
lpg_colour: \lpgcolour.kr(0),
|
|
);
|
|
sig = Pan2.ar(sig[0], \pan.kr(0));
|
|
sig = sig * env * \amp.kr(-6).dbamp;
|
|
OffsetOut.ar(out, sig);
|
|
}).add;
|
|
d.put(name, synth);
|
|
});
|
|
);
|
|
|
|
|
|
(
|
|
[
|
|
'Bcsaw',
|
|
'Bmorph',
|
|
'Bsaw_square',
|
|
'Bsine_triangle',
|
|
'Bbuzz',
|
|
'Bsquare_sub',
|
|
'Bsaw_sub',
|
|
'Bsquare_sync',
|
|
'Bsaw_sync',
|
|
'Bt_saw',
|
|
'Bt_square',
|
|
'Bt_triangle',
|
|
'Bt_sine',
|
|
'Bt_ring_mod',
|
|
'Bsaw_swarm',
|
|
'Bsaw_comb',
|
|
'Btoy',
|
|
'Bfilter_lp',
|
|
'Bfilter_pk',
|
|
'Bfilter_bp',
|
|
'Bfilter_hp',
|
|
'Bvosim',
|
|
'Bvowel',
|
|
'Bvowel_fof',
|
|
'Bharmonics',
|
|
'Bbfm',
|
|
'Bfeedback_fm',
|
|
'Bchaotic_feedback_fm',
|
|
'Bplucked',
|
|
'Bbowed',
|
|
'Bblown',
|
|
'Bfluted',
|
|
'Bstruck_bell',
|
|
'Bstruck_drum',
|
|
'Bbkick',
|
|
'Bcymbal',
|
|
'Bbsnare',
|
|
'Bbwavetable',
|
|
'Bwave_map',
|
|
'Bwave_line',
|
|
'Bwave_paraphonic',
|
|
'Bfiltered_noise',
|
|
'Btwin_peaks_noise',
|
|
'Bclocked_noise',
|
|
'Bgranular_cloud',
|
|
'Bparticle_noise',
|
|
'Bdigital_modulation',
|
|
'Bquestion_mark'].do({
|
|
arg name, index;
|
|
var synth;
|
|
synth = SynthDef(name, {
|
|
arg out;
|
|
var sig;
|
|
var env = EnvGen.ar(Env.perc(\attack.kr(0.01), \release.kr(1)), doneAction: Done.freeSelf);
|
|
var freq = \freq.kr;
|
|
sig = MiBraids.ar(
|
|
pitch: freq.cpsmidi,
|
|
timbre: \timbre.kr(0.5),
|
|
color: \color.kr(0.5),
|
|
resamp: 0,
|
|
decim: \decim.kr(32),
|
|
model: index,
|
|
ws: \ws.kr(0),
|
|
bits: \bits.kr(0)
|
|
);
|
|
OffsetOut.ar(out, Pan2.ar(sig * env * \amp.kr(-6).dbamp, \pan.kr(0)));
|
|
}).add;
|
|
d.put(name, synth);
|
|
});
|
|
);
|
|
|
|
(
|
|
z = SynthDef(\tides, {
|
|
arg out;
|
|
var env = Env.perc(\attack.kr(0.01), \release.kr(1)).ar(2);
|
|
var sig = MiTides.ar(
|
|
freq: \freq.kr(400),
|
|
shape: \shape.kr(0),
|
|
slope: \slope.kr(0),
|
|
smooth: \smooth.kr(0),
|
|
shift: \shift.kr(0),
|
|
output_mode: \mode.kr(2),
|
|
ramp_mode: 1,
|
|
rate: 1
|
|
);
|
|
OffsetOut.ar(out,
|
|
Pan2.ar(sig * env * \amp.kr(-6).dbamp,
|
|
\pan.kr(0)
|
|
));
|
|
}).add;
|
|
d.tides = z;
|
|
);
|
|
|
|
(
|
|
z = SynthDef('kick', {
|
|
arg out;
|
|
var p0, p1, p, freq0, freq1, freqEnv, sig;
|
|
p0 = 0.006699687;
|
|
p1 = 0.00001884606;
|
|
p = (1-\vsweep.kr(0.5)) * p0 + (\vsweep.kr * p1);
|
|
freq1 = \freq.kr(100);
|
|
freq0 = freq1 * \mul.kr(20);
|
|
freqEnv = EnvGen.ar(Env([0,1], [1.0], [0]));
|
|
freqEnv = freq1 + ((freq0-freq1)/(1.0 + (freqEnv/p)));
|
|
sig = SinOsc.ar(freqEnv);
|
|
sig = sig * EnvGen.ar(Env([1,1,0], [\hold.kr(0.25), \release.kr(0.5)], [0,0]), doneAction: Done.freeSelf) * \amp.kr(-6).dbamp;
|
|
sig = Pan2.ar(sig, \pan.kr(0.0));
|
|
OffsetOut.ar(out, sig);
|
|
}).add;
|
|
d.kick = z;
|
|
);
|
|
|
|
|
|
(
|
|
z = SynthDef('nnkick', {
|
|
arg out;
|
|
var sig, env;
|
|
env = Env.perc(\attack.kr(0.001), \release.kr(0.8)).ar(Done.freeSelf);
|
|
sig = SinOsc.ar(\freq.kr(50) * (1 + (8 * Env.perc(0, 0.13, curve:-8).ar)));
|
|
sig = sig + (SinOsc.ar(XLine.ar(\sweep.kr(8000), 100, 0.01)) * Env.perc(0.0001,0.01).ar * -8.dbamp);
|
|
sig = sig +(BPF.ar(WhiteNoise.ar, \cutoff.kr(10120), 0.5)*Env.perc(0.0001, 0.03).ar * -8.dbamp);
|
|
sig = sig.tanh;
|
|
sig = sig * env * \amp.kr(-10).dbamp;
|
|
OffsetOut.ar(out, Pan2.ar(sig, \pan.kr(0.0)));
|
|
}).add;
|
|
d.nnkick = z;
|
|
);
|
|
|
|
|
|
(
|
|
["lpf", "bpf", "hpf"].do({
|
|
arg synth_type, index;
|
|
z = SynthDef(("chip" ++ synth_type).asSymbol , {
|
|
arg out=0;
|
|
var vibrato = SinOsc.ar(
|
|
\vibspeed.kr(2)).range(
|
|
\vibdepth.kr(0).neg,
|
|
\vibdepth.kr
|
|
) * \vibrato.kr(1);
|
|
var pitchEnv = XLine.ar(1/4, 1, \glide.kr(0.1) / 10);
|
|
var filtEnv = Env.perc(\fattack.kr(0.01), \frelease.kr(1.0)).kr(doneAction: 0);
|
|
var detune = \detune.kr(0);
|
|
var basePitch = pitchEnv * \freq.kr(400);
|
|
var sound = AY.ar(
|
|
tonea: AY.freqtotone(basePitch + vibrato + detune),
|
|
toneb: AY.freqtotone(basePitch * \ratio.kr(1) + vibrato - detune),
|
|
tonec: AY.freqtotone(basePitch / \ratio.kr + vibrato + (detune/2)),
|
|
noise: \noise.kr(0).linlin(0, 1, 0, 31),
|
|
control: \control.kr(0.125).linlin(0, 1, 0, 63),
|
|
vola: \vola.kr(15),
|
|
volb: \volb.kr(15),
|
|
volc: \volc.kr(15),
|
|
envfreq: \envfreq.kr(4),
|
|
envstyle: \envstyle.kr(1),
|
|
chiptype: \type.kr(0)
|
|
);
|
|
var env = Env.asr(
|
|
\attack.kr(0.01),
|
|
\sustain.kr(0),
|
|
\release.kr(0.125/2)
|
|
);
|
|
env = EnvGen.ar(
|
|
env,
|
|
gate: \gate.kr(1.0),
|
|
doneAction: 2
|
|
);
|
|
sound = VadimFilter.ar(
|
|
sound,
|
|
freq: \cutoff.kr(10000) * filtEnv,
|
|
resonance: \resonance.kr(0.5),
|
|
type: index
|
|
);
|
|
sound = sound * env * \amp.kr(1.0);
|
|
Out.ar(out, Pan2.ar(sound ! 2, \pan.kr(0.0)));
|
|
}).add;
|
|
d[z.name] = z;
|
|
});
|
|
);
|
|
|
|
z = nil; // We don't need that variable anymore
|