diff --git a/everything_you_do_is_a_balloon.wiki b/everything_you_do_is_a_balloon.wiki new file mode 100644 index 0000000..37e6273 --- /dev/null +++ b/everything_you_do_is_a_balloon.wiki @@ -0,0 +1,13 @@ +DRC + +1 OSC Square Wave dropped one octave +2 OSC same volume, same octave, square wave, fine detuning (right), + +1 EG slowish attack, normal ds, raise release a little bit +2 EG increase modulation a little bit +2 EG raise attack to half, bring decay to maximum, sustain to half, raise release a little bit + +chorus: low rate, norma depth, no feedback +lpf: 800, subtle resonance + +reverb: loads of decay and a nice amount diff --git a/good padsynth.scd b/good padsynth.scd new file mode 100644 index 0000000..2dd20b2 --- /dev/null +++ b/good padsynth.scd @@ -0,0 +1,92 @@ +( +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; +) \ No newline at end of file diff --git a/live/granular_EF-edit.scd b/live/granular_EF-edit.scd index f962121..aa80f27 100644 --- a/live/granular_EF-edit.scd +++ b/live/granular_EF-edit.scd @@ -30,15 +30,34 @@ SynthDef(\cantorial_tremolo, { |out, pan = 0, dur = 0.1, atk=0.3, dec=0.4, sus=0 maxGrains: 512 ); - sig = sig * env * amp; - filter = MoogVCF.ar(sig, crf, 0.3); - Out.ar(out, filter); -}).play; + sig = sig * env * amp * filter; + + Out.ar(out, sig); +}).add; ) ) +( +Ppar([ + Pbind( + \instrument, \cantorial_trill, + \dur, 1, // Adjust as needed + \amp, 1, // Amplitude (adjust as needed) + \pan, 0, // Pan position + ), + Pbind( + \instrument, \cantorial_tremolo, + \dur, 0.2, // Adjust as needed + \amp, 1, // Amplitude (adjust as needed) + \pan, 0, // Pan position for the second synth (can be changed) + ) +]).play; +) + + + ( // Becoming satisfactory granular synth @@ -58,14 +77,12 @@ SynthDef(\cantorial_trill, { |out, pan = 0, dur = 0.5, atk=0.3, dec=0.4, sus=0.1 doneAction: 2 ); - rate = (note.midicps / 60.midicps); - sig = GrainBuf.ar( numChannels: 2, trigger: Impulse.kr(grainRate), dur: dur, sndbuf: b, - rate: rate, + rate: 1, pos: 0.01, interp: 2, pan: pan, @@ -91,7 +108,7 @@ b = Buffer.read(s, "/home/lcoogan/snd/live/2025-04-26.Basic_City_Brewery/granula ( SynthDef(\cantorial_reed , { - arg amp = 0.3, pan = 0; + arg amp = 0.3, pan = 0, pos = 0; var sig; sig = GrainBuf.ar( numChannels: 2, @@ -99,7 +116,7 @@ SynthDef(\cantorial_reed , dur: 0.8, sndbuf: b, rate: 1, - pos: 1.25, // 1.25, 1.20 + pos: 0.25, //.20 interp: 2, pan: pan, envbufnum: -1, @@ -110,4 +127,96 @@ SynthDef(\cantorial_reed , Out.ar(0, sig); }).play; ) -) \ No newline at end of file +) + +Synth(\cantorial_reed); + + + + + + +b = Buffer.read(s, "/home/lcoogan/snd/live/2025-04-26.Basic_City_Brewery/granular/Cantorial/Acheinu_Kol_Beit_Israel.wav"); +c = Buffer.read(s, "/home/lcoogan/snd/live/2025-04-26.Basic_City_Brewery/granular/Cantorial/Cantor_Samuel_Malavsky_Zechor.wav"); + +SynthDef(\cantorial_reed, +{ + arg amp = 0.3, pan = 0, pos = 0, bufSwitch = 0; + var sig, buf; + + // Choose buffer based on bufSwitch (0 or 1) + buf = Select.kr(bufSwitch, [b, c]); + + sig = GrainBuf.ar( + numChannels: 2, + trigger: Dust.ar(40), + dur: 0.8, + sndbuf: buf, // Dynamically selected buffer + rate: 1, + pos: 0.25, + interp: 2, + pan: pan, + envbufnum: -1, + maxGrains: 512 + ); + + sig = sig * amp; + Out.ar(0, sig); +}).add; + + +// Example: Play the synth and switch between buffers +x = Synth(\cantorial_reed, [\bufSwitch, 0]); // Starts with b1 +x.set(\bufSwitch, 1); // Switches to b2 + + + +( +b = Buffer.read(s, "/home/lcoogan/snd/live/2025-04-26.Basic_City_Brewery/granular/Cantorial/Acheinu_Kol_Beit_Israel.wav"); +c = Buffer.read(s, "/home/lcoogan/snd/live/2025-04-26.Basic_City_Brewery/granular/Cantorial/Cantor_Samuel_Malavsky_Zechor.wav"); + +SynthDef(\cantorial_reed, +{ + arg amp = 0.3, pan = 0, pos = 0, xfade = 0; // 'xfade' controls blending (0 = only b, 1 = only c) + var sig1, sig2, sig; + + sig1 = GrainBuf.ar( + numChannels: 2, + trigger: Dust.ar(40), + dur: 0.8, + sndbuf: b, + rate: 1, + pos: 0.25, + interp: 2, + pan: pan, + envbufnum: -1, + maxGrains: 512 + ); + + sig2 = GrainBuf.ar( + numChannels: 2, + trigger: Dust.ar(40), + dur: 0.8, + sndbuf: c, + rate: 1, + pos: 0.25, + interp: 2, + pan: pan, + envbufnum: -1, + maxGrains: 512 + ); + + // Crossfade between the two signals + sig = XFade2.ar(sig1, sig2, (xfade * 2) - 1); // -1 = sig1, 1 = sig2 + + sig = sig * amp; + Out.ar(0, sig); +}).add; +) + +// Play and smoothly fade between buffers +x = Synth(\cantorial_reed, [\xfade, 0]); // Start with buffer b +x.set(\xfade, 0.5); // Midpoint mix +x.set(\xfade, 0); // Fully buffer c +x.free; + diff --git a/live/tr08 EF-edit.scd b/live/tr08 EF-edit.scd index 5b34c35..fa2797d 100644 --- a/live/tr08 EF-edit.scd +++ b/live/tr08 EF-edit.scd @@ -44,7 +44,6 @@ MIDIdef.cc(\ccTest, { ~samples.class ~samples[39].class -~samples[39]. ( ~sampleDir = PathName("/home/lcoogan/snd/live/2025-04-26.Basic_City_Brewery/trax/01-borrowed flesh/seq/808"); @@ -74,8 +73,7 @@ SynthDef(\sampleTrigger, { |buf, ampin = 0| ( s.newBusAllocators; -~bdampbus = Bus.control(s, 1); -// ~bdampbus.value = 0.8; +~bdampbus = Bus.control(s, 1); // adding .value(0.5) sets an initial of 0.5 ~sdampbus = Bus.control(s, 1); ~ltampbus = Bus.control(s, 1); ~mtampbus = Bus.control(s, 1); @@ -139,7 +137,7 @@ MIDIdef.noteOn('808trig', { |vel, nn| {75} { Synth(\sampleTrigger, [buf: ~sample.cl, ampin: ~clampbus]); } -}, noteNum: [36, 38, 39, 42, 46, 49], chan: [9]); +}, noteNum: [36, 38, 39, 42, 46, 49], chan: [0]); MIDIdef.cc('808amp', { |val, num| switch(num) @@ -155,6 +153,6 @@ MIDIdef.cc('808amp', { |val, num| {85} {~cyampbus.value = val / 127} {88} {~cbampbus.value = val / 127}; -}, ccNum: [24, 29, 48, 51, 54, 57, 60, 63, 82, 85, 88], chan: [9]); +}, ccNum: [24, 29, 48, 51, 54, 57, 60, 63, 82, 85, 88], chan: [0]); ) -MIDIFunc.trace(false) \ No newline at end of file +MIDIFunc.trace(true) \ No newline at end of file diff --git a/pads/mel.scd b/pads/mel.scd new file mode 100644 index 0000000..43ff385 --- /dev/null +++ b/pads/mel.scd @@ -0,0 +1,98 @@ +( +SynthDef(\mellotronFlute, { + arg freq = 440, amp = 0.8, gate = 1, pan = 0, vibratoRate = 1, vibratoDepth = 0.15, + noiseLevel = 0.2, ringModFreq = 3, lpfFreq = 2000, res = 0.8, lpfLfoRate = 1, lpfLfoDepth = 100, + detune = 0.005; // Detune amount (in ratio) + + var sig, osc1, osc2, vibrato, noise, env, lpfMod, freq1, freq2; + + // Natural vibrato (LFO) + vibrato = SinOsc.kr(vibratoRate, 0, vibratoDepth).range(0.98, 1.02); + + // Detuned frequencies (slight offsets) + freq1 = freq * (0.99); // Slightly sharp + freq2 = freq * (1.01); // Slightly flat + + // 1st Oscillator: Triangle waves with vibrato + osc1 = Mix([ + LFTri.ar(freq1 * vibrato), + LFTri.ar(freq2 * vibrato) + ]) * 0.5; // Mix detuned voices + + // Pink noise mixed into the first oscillator for breathiness + noise = WhiteNoise.ar(noiseLevel); + osc1 = Mix([osc1, noise * 0.5]); // Blend noise into osc1 + + // 2nd Oscillator: Detuned ring modulation for a natural tone + osc2 = Mix([ + Saw.ar(freq1 * ringModFreq), + SinOscFB.ar(freq2 * ringModFreq) + ]) * 0.5 * osc1; // Ring-modulated with detuned pair + + // Mix oscillators together + sig = Mix([ osc1, osc2 * 0.5]); + + // LFO for filter frequency modulation + lpfMod = SinOsc.kr(lpfLfoRate).range(lpfFreq - lpfLfoDepth, lpfFreq + lpfLfoDepth); + + // Low-pass filter with LFO modulation and slight resonance + sig = RLPF.ar(sig, lpfMod, res); + + // Envelope (slow attack for a natural swell) + env = EnvGen.kr(Env.adsr(0.2, 3, 1, 2), gate, doneAction: 2); + + + // Apply envelope and amp + sig = sig * env * amp; + + sig = sig.tanh(8); + sig = BLowShelf.ar(sig, 200, 0.5, 9); + // sig = sig.blend(GVerb.ar(sig, 200, 4), 0.15); + + + + + // sig = sig.blend(BPF.ar(sig, 800, 0.5), 0.9); + // Output with panning + Out.ar(0, Pan2.ar(sig, pan)); +}).add; +) + +// Play the flute synth +x = Synth(\mellotronFlute, [\freq, 53.midicps, \detune, 0.1]); // Slight detune for a richer sound + + + + + + +( +Pbind( + \instrument, \mellotronFlute, // Use your SynthDef + \freq, Pseq([[48, 20, 53], [10, 58, 60], [55, 72, 74], [10, 63, 70]].midicps, inf), // Sequence of MIDI notes converted to Hz + // \freq, Pseq([[50, 65], [55, 72], [72, 74], [48, 20]].midicps, inf), // Sequence of MIDI notes converted to Hz + \detune, Pseq([0.2], inf), // Varying detune values + \dur, Pseq([2], inf), // Duration per note + \amp, 0.08 + ; +).play; +) + + + + + + + +( +Pbind( + \instrument, \mellotronFlute, // Use your SynthDef + // \freq, Pseq([[53]].midicps, inf), // Sequence of MIDI notes converted to Hz + \freq, Pseq([[50, 65], [55, 72], [72, 74], [48, 20]].midicps, inf), // Sequence of MIDI notes converted to Hz + \detune, 1.01, // Varying detune values + \dur, Pseq([0.8], inf), // Duration per note + \amp, 0.1; +).play; +) + +