A recent work of mine

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;
)
2 Likes