You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.4 KiB
121 lines
2.4 KiB
s.boot;
|
|
|
|
// load instrument and presets
|
|
(
|
|
var perc_gen_source = (("SC_ALGS_PATH".getenv)+/+"synths/perc_gen/instr.scd").load;
|
|
~perc_gen_dict = NodeDictionary.newFrom(perc_gen_source);
|
|
~perc_gen_presets = (("SC_ALGS_PATH".getenv)+/+"synths/perc_gen/presets.scd").load;
|
|
)
|
|
|
|
~perc_gen_presets.do({
|
|
|preset|
|
|
preset.key.postln;
|
|
// Make Ndef with same name as preset name
|
|
~perc_gen_dict.makeSourceNDef(preset.key);
|
|
// Apply settings
|
|
preset.value.do({|v| Ndef(preset.key).set(v[0], v[1])});
|
|
Ndef(preset.key).play;
|
|
});
|
|
|
|
// add some Tdefs
|
|
Tdef(\kick, {
|
|
loop{
|
|
Ndef(~perc_gen_presets[0].key).set(\amp, 8.dbamp);
|
|
Ndef(~perc_gen_presets[0].key).set(\gate, 1);
|
|
1.wait;
|
|
}
|
|
}).play;
|
|
|
|
Tdef(\kick2, {
|
|
(1/3).wait;
|
|
loop{
|
|
Ndef(~perc_gen_presets[0].key).set(\amp, 4.dbamp);
|
|
Ndef(~perc_gen_presets[0].key).set(\gate, 1);
|
|
1.wait;
|
|
}
|
|
}).play;
|
|
|
|
Tdef(\hat, {
|
|
var amps = Pseq([1, 1, 0, 1, 0, 1]).loop.asStream;
|
|
loop{
|
|
Ndef(~perc_gen_presets[1].key).set(\gate, 1);
|
|
Ndef(~perc_gen_presets[1].key).set(\amp, -6.dbamp * amps.next);
|
|
(1/6).wait;
|
|
}
|
|
}).play;
|
|
|
|
Tdef(\snare, {
|
|
loop{
|
|
Ndef(~perc_gen_presets[4].key).set(\amp, -8.dbamp);
|
|
Ndef(~perc_gen_presets[4].key).set(\gate, 1);
|
|
(4/3).wait;
|
|
}
|
|
}).play;
|
|
|
|
Tdef(\wood, {
|
|
var amps = Pbjorklund(4, 7).loop.asStream;
|
|
loop{
|
|
Ndef(~perc_gen_presets[3].key).set(\gate, 1);
|
|
Ndef(~perc_gen_presets[3].key).set(\amp, -6.dbamp * amps.next);
|
|
(1/8).wait;
|
|
}
|
|
}).play;
|
|
|
|
Ndef(\fx).ar(2);
|
|
Ndef(\fx, {
|
|
var in = \in.ar([0, 0]);
|
|
var t1 = \t1.kr(0.5);
|
|
var t2 = \t2.kr(0.5);
|
|
[in[0] + CombC.ar(in[0], 1.0, t1, 2.0), in[1] + CombC.ar(in[1], 1.0, t2, 2.0)];
|
|
});
|
|
|
|
Ndef(\fx).play;
|
|
|
|
(
|
|
// WORKS ONLY FOR LAST!
|
|
[0, 1, 3, 4].do({
|
|
|index|
|
|
Ndef(\fx) <<>.in Ndef(~perc_gen_presets[index].key);
|
|
});
|
|
)
|
|
|
|
// constrol fx delay time
|
|
Tdef(\fxdelay, {
|
|
var dTimes1 = Pseq([1/8, 1/16, 1/3]).loop.asStream;
|
|
var dTimes2 = Pseq([1/16, 1/3, 1/8]).loop.asStream;
|
|
loop{
|
|
Ndef(\fx).set(\t1, dTimes1);
|
|
Ndef(\fx).set(\t2, dTimes2);
|
|
(4/3).wait;
|
|
}
|
|
}).play;
|
|
|
|
(
|
|
Ndef(\fx2).ar(2);
|
|
Ndef(\fx2, {
|
|
var in = \in.ar([0, 0]);
|
|
var sig = PitchShift.ar(in, 0.2, Lag.kr(LFSaw.kr(0.1).range(0.2, 0.25)), 1/2);
|
|
sig = DiodeRingMod.ar(sig, LFPulse.ar(160));
|
|
FreeVerb.ar(sig, 0.8, 1.0, 0.25) * 10;
|
|
});
|
|
|
|
Ndef(\fx2).play;
|
|
)
|
|
|
|
Ndef(\fx2) <<>.in Ndef(~perc_gen_presets[1].key)
|
|
|
|
Tdef(\fxswitch, {
|
|
var source = Pseq([1, 3]).loop.asStream;
|
|
loop{
|
|
Ndef(\fx2) <<>.in Ndef(~perc_gen_presets[source.next].key);
|
|
6.wait;
|
|
}
|
|
}).play;
|
|
|
|
Tdef(\fxswitch).stop
|
|
|
|
(
|
|
Ndef.clear;
|
|
Tdef.clear;
|
|
)
|