( SynthDef(\boc_pad, { arg freq = 210, amp = 0.1, att = 2, dec = 3, sus = 0.1, rel = 0, detune = -8, lpfFreq = 800, rq = 0.3, revMix = 0.5, revSize = 20, revDamping = 0.5, tremRate = 10, tremDepth = 0.8; // Tremolo parameters var osc1, osc2, env, sig, filt, chorus, reverb, tremolo; osc1 = SinOsc.ar(freq, 0.5); osc2 = Saw.ar(freq * (1 + detune), 0.5); sig = Mix([osc1, osc2]) * 0.5; env = EnvGen.kr(Env.adsr(att, dec, sus, rel), doneAction: 2); filt = RLPF.ar(sig, lpfFreq, rq); chorus = CombL.ar(filt, 0.01, LFDNoise3.kr(2).range(0.005, 0.01), 0.3); // Reverb reverb = GVerb.ar(chorus, revSize, revDamping, mul: revMix); // Tremolo (amplitude modulation) tremolo = SinOsc.kr(tremRate).range(1 - tremDepth, 1); Out.ar(0, reverb * tremolo * env * amp); }).add; ) ( Pbind( \instrument, \boc_pad, \freq, Pseq([ [60, 64, 67].midicps, // C major [62, 65, 69].midicps, // D minor [57, 60, 64].midicps, // A minor [55, 59, 62].midicps // G major ], inf), // Infinite loop \dur, 1, // Each chord lasts 2 beats \amp, 0.1 ).play; ) ( Pbind( \instrument, \boc_pad, \freq, Pseq([ [40, 50, 59].midicps, [62, 65, 67].midicps, [50, 58, 64].midicps ], inf), // Infinite loop \dur, 2, // Each chord lasts 2 beats \amp, 0.008 ).play; ) ( SynthDef(\boc_pad, { arg freq = 210, amp = 0.1, att = 0.3, dec = 0.3, sus = 0.1, rel = 0, detune = 0.1, lpfFreq = 2000, rq = 2, revMix = 0.5, revSize = 20, revDamping = 0.5, tremRate = 3, tremDepth = 0.1; // Tremolo parameters var osc1, osc2, env, sig, filt, chorus, tremolo, panLeft, panRight; // Generate two oscillators osc1 = Pulse.ar(freq, 0.5); osc2 = Pulse.ar(freq * (1 + detune), 0.5); sig = Mix([osc1, osc2]) * 0.5; env = EnvGen.kr(Env.adsr(att, dec, sus, rel), doneAction: 2); // Lowpass filter filt = LPF.ar(sig, lpfFreq, rq); // Apply a chorus to create stereo width chorus = CombL.ar(filt, 0.01, LFDNoise3.kr(1).range(0.008, 0.1), 0.3); // Apply tremolo for amplitude modulation tremolo = SinOsc.kr(tremRate).range(1 - tremDepth, 1); // Split the signal into two channels and pan them panLeft = chorus * tremolo * env * amp * 0.5; // Left channel panRight = chorus * tremolo * env * amp * 0.5; // Right channel // Slightly pan the signals to create a stereo image Out.ar(0, [panLeft, panRight]); // Send to both left and right channels }).add; )