a recent work of mine
(
(
SynthDef(\layeredImpulses, {
var sig1, sig2, sig3, env1, env2, env3, trig1, trig2, trig3, pan1, pan2, pan3, mix, reverb;
// Triggers for different rhythmic rates
trig1 = Impulse.kr([1/3, 1/7] * 9); // slow pulses
trig2 = Impulse.kr([1/3, 1/7] * 6); // medium
trig3 = Impulse.kr([1/3, 1/7] * 3); // fast
// Percussive envelopes
env1 = EnvGen.kr(Env.perc(0.01, 0.3), trig1);
env2 = EnvGen.kr(Env.perc(0.005, 0.2), trig2);
env3 = EnvGen.kr(Env.perc(0.001, 0.1), trig3);
// Randomized stereo panning
pan1 = LFNoise1.kr(0.1).range(-1, 1);
pan2 = LFNoise1.kr(0.15).range(-1, 1);
pan3 = LFNoise1.kr(0.2).range(-1, 1);
// Each sine tone with stereo movement
sig1 = Pan2.ar(SinOsc.ar(90, 0, env1 * 0.1), pan1);
sig2 = Pan2.ar(SinOsc.ar(440, 0, env2 * 0.1), pan2);
sig3 = Pan2.ar(SinOsc.ar(2000, 0, env3 * 0.1), pan3);
// Mix and apply reverb
mix = sig1 + sig2 + sig3;
reverb = FreeVerb.ar(mix, 0.4, 0.8, 0.3);
Out.ar(0, reverb);
}).add;
);
(
SynthDef(\layeredImpulses_v2, {
var sig1, sig2, sig3, env1, env2, env3, trig1, trig2, trig3, pan1, pan2, pan3, mix, reverb;
// Randomized triggers with varying LFNoise rates
trig1 = LFNoise0.kr([1/3, 1/7] * 18); // slow variation
trig2 = LFNoise1.kr([1/3, 1/7] * 12); // medium variation
trig3 = LFNoise2.kr([1/3, 1/7] * 6); // fast variation
// Percussive envelopes
env1 = EnvGen.kr(Env.perc(0.01, 0.3), trig1);
env2 = EnvGen.kr(Env.perc(0.005, 0.2), trig2);
env3 = EnvGen.kr(Env.perc(0.001, 0.1), trig3);
// Randomized stereo panning
pan1 = LFNoise1.kr(0.1).range(-1, 1);
pan2 = LFNoise1.kr(0.15).range(-1, 1);
pan3 = LFNoise1.kr(0.2).range(-1, 1);
// Each sine tone with randomized stereo movement
sig1 = Pan2.ar(SinOsc.ar(90, 0, env1 * 0.1), pan1);
sig2 = Pan2.ar(SinOsc.ar(440, 0, env2 * 0.1), pan2);
sig3 = Pan2.ar(SinOsc.ar(2000, 0, env3 * 0.1), pan3);
// Mix and apply reverb for texture
mix = sig1 + sig2 + sig3;
reverb = FreeVerb.ar(mix, 0.4, 0.8, 0.3);
Out.ar(0, reverb);
}).add;
);
(
SynthDef(\layeredNoiseCloud, {
|out=0, amp=0.1, revMix=0.3, revRoom=0.7, revDamp=0.5, delayTime=0.2, delayDecay=2.0|
var trigBass, trigMid, trigHigh;
var envBass, envMid, envHigh;
var sigBass, sigMid, sigHigh;
var panBass, panMid, panHigh;
var mixed, filtered, saturated, delayed, reverbed;
// Trigger sources: different types of noise
trigBass = LFNoise0.kr(3).abs > 0.8; // chunkier randomness
trigMid = LFNoise1.kr(6).abs > 0.7; // smooth randomness
trigHigh = Dust.kr(8); // sparse pointillism
// Envelopes
envBass = EnvGen.kr(Env.perc(0.01, 0.3), trigBass);
envMid = EnvGen.kr(Env.perc(0.005, 0.2), trigMid);
envHigh = EnvGen.kr(Env.perc(0.001, 0.1), trigHigh);
// Panning: slowly modulated
panBass = LFNoise1.kr(0.1).range(-1, 1);
panMid = LFNoise1.kr(0.2).range(-1, 1);
panHigh = LFNoise1.kr(0.3).range(-1, 1);
// Sine wave voices with frequency scaling from envelopes
sigBass = Pan2.ar(SinOsc.ar(90, 0, envBass), panBass);
sigMid = Pan2.ar(SinOsc.ar(440, 0, envMid), panMid);
sigHigh = Pan2.ar(SinOsc.ar(2000, 0, envHigh), panHigh);
// Combine signals
mixed = (sigBass + sigMid + sigHigh) * amp;
// Soft distortion for richness
saturated = tanh(mixed * 4);
// Short delay with feedback
delayed = CombC.ar(saturated, delayTime, delayTime, delayDecay);
// Reverb
reverbed = FreeVerb.ar(delayed, revMix, revRoom, revDamp);
// Output
Out.ar(out, reverbed);
}).add;
);
(
SynthDef(\vegaIkedaHybrid, {
var trig1, trig2, trig3;
var env1, env2, env3;
var lfo1, lfo2, lfo3;
var amp1, amp2, amp3;
var sig1, sig2, sig3;
var pan1, pan2, pan3;
var highFreqImpulses, glitchTone;
var output, reverb;
// Triggers for impulses
trig1 = Impulse.kr(11.3);
trig2 = Dust.kr(7);
trig3 = Impulse.kr(67);
// Percussive envelopes
env1 = EnvGen.kr(Env.perc(0.01, 0.2), trig1);
env2 = EnvGen.kr(Env.perc(0.005, 0.15), trig2);
env3 = EnvGen.kr(Env.perc(0.001, 0.05), trig3);
// LFNoise as controllers for amplitude
lfo1 = LFNoise1.kr(0.3).range(0.05, 0.3);
lfo2 = LFNoise1.kr(0.5).range(0.05, 0.25);
lfo3 = LFNoise1.kr(0.8).range(0.01, 0.1);
// Final amplitude control
amp1 = lfo1 * env1;
amp2 = lfo2 * env2;
amp3 = lfo3 * env3;
// Panning
pan1 = LFNoise1.kr(0.05).range(-1, 1);
pan2 = LFNoise1.kr(0.1).range(-1, 1);
pan3 = LFNoise1.kr(0.2).range(-1, 1);
// Sine clicks with LFO-modulated amplitude envelopes
sig1 = Pan2.ar(SinOsc.ar(100, 0, amp1), pan1);
sig2 = Pan2.ar(SinOsc.ar(500, 0, amp2), pan2);
sig3 = Pan2.ar(SinOsc.ar(8000, 0, amp3), pan3);
// Ikeda-style high freq elements
highFreqImpulses = Pan2.ar(Blip.ar(16000, 10, 0.05) * env3, LFNoise2.kr(0.05).range(-1, 1));
glitchTone = Pan2.ar(VarSaw.ar(8800, 0, 0.05) * env2, LFNoise1.kr(0.08).range(-1, 1));
// Mix and spatialize
output = Mix([sig1, sig2, sig3, highFreqImpulses, glitchTone]);
reverb = FreeVerb.ar(output, 0.3, 0.7, 0.2);
Out.ar(0, reverb * 0.5);
}).add;
);
)
(
t = Task({
s.record;
3.wait;
x = Synth(\layeredImpulses);
60.wait;
x.free;
x = Synth(\layeredImpulses_v2);
60.wait;
x.free;
x = Synth(\layeredNoiseCloud);
120.wait;
x.free;
x = Synth(\vegaIkedaHybrid);
90.wait;
x.free;
Server.freeAll;
}).play;
)