stuff
parent
95a8318553
commit
ef950cf881
@ -0,0 +1,9 @@
|
|||||||
|
(
|
||||||
|
SynthDef(\apl, {
|
||||||
|
var sig;
|
||||||
|
|
||||||
|
sig = SinOsc.ar(\freq.ar(440));
|
||||||
|
|
||||||
|
Out.ar(0, sig);
|
||||||
|
}).add;
|
||||||
|
)
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
var drive = 2; // change this to see effect
|
||||||
|
var x = Line.kr(-1, 1, 0.01); // simulate signal range
|
||||||
|
tanh(x * drive) / tanh(drive)
|
||||||
|
}.play;
|
||||||
|
|
||||||
|
|
||||||
|
(
|
||||||
|
{
|
||||||
|
var drive = 20; // Try values like 1, 5, 10, etc.
|
||||||
|
var sig = SinOsc.ar(220); // Your basic oscillator
|
||||||
|
var shaped = tanh(sig * drive) / tanh(drive); // Dividing normalizes it for some reason I don't understand
|
||||||
|
shaped * 0.1 // scale output to prevent clipping
|
||||||
|
}.plot;
|
||||||
|
)
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
(
|
||||||
|
{
|
||||||
|
var modEnv = EnvGen.kr(Env.adsr(1, 0.5, 0.1, 0.5), doneAction: 2);
|
||||||
|
var modulator = SinOsc.ar(50) * 500 * modEnv;
|
||||||
|
var carrier = SinOsc.ar(200 + modulator) * 0.1;
|
||||||
|
carrier
|
||||||
|
}.play;
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
(
|
||||||
|
{
|
||||||
|
var dur = 1.5;
|
||||||
|
var gaussEnv = EnvGen.kr(
|
||||||
|
Env.new(
|
||||||
|
levels: [30, 60, 0],
|
||||||
|
times: [1, 3, 4],
|
||||||
|
curves: [-4, -20] // Negative curves for smoother, bell-shaped fade in/out
|
||||||
|
),
|
||||||
|
doneAction: 2
|
||||||
|
);
|
||||||
|
|
||||||
|
var modulator = SinOsc.ar(10) * 500 * gaussEnv;
|
||||||
|
var carrier = SinOsc.ar(10 + modulator) * 0.1;
|
||||||
|
carrier = RLPF.ar(carrier, 1e4, 0.1);
|
||||||
|
}.play;
|
||||||
|
)
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
{(SinOsc.ar(440) + SinOsc.ar(140)).dup * 0.1}.play;
|
||||||
|
{ (SinOsc.ar(440, 0) + SinOsc.ar(140, 0)).dup * 0.1 }.play;
|
||||||
|
|
||||||
|
(
|
||||||
|
{
|
||||||
|
var phasor = Phasor.ar(0, 40 / SampleRate.ir, 0, 1); // base phase
|
||||||
|
var sig = SinOsc.ar(0, phasor * 2pi) + SinOsc.ar(0, phasor * 2pi * (SinOsc.ar(640)));
|
||||||
|
sig.dup * 0.1
|
||||||
|
}.play;
|
||||||
|
|
||||||
|
)
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
// A SynthDef without samples, using oscillators and generative modulation
|
||||||
|
(
|
||||||
|
SynthDef(\fellGenerative, { |out = 0, amp = 0.3, dur = 1, freq = 440|
|
||||||
|
var sig, env, osc1, osc2, noise, mod, freqMod, pan;
|
||||||
|
|
||||||
|
// Base oscillators
|
||||||
|
osc1 = SinOsc.ar(freq, 0, 0.5); // Sine wave oscillator 1
|
||||||
|
osc2 = Saw.ar(freq * 2, 0.3); // Saw wave oscillator 2
|
||||||
|
|
||||||
|
// Generate white noise
|
||||||
|
noise = WhiteNoise.ar(0.1);
|
||||||
|
|
||||||
|
// Frequency modulation with LFNoise1
|
||||||
|
freqMod = LFNoise1.kr(0.1).range(0.9, 1.1);
|
||||||
|
osc1 = osc1 * freqMod; // Modulate osc1's frequency slightly over time
|
||||||
|
|
||||||
|
// Envelope for smooth start and end of each sound
|
||||||
|
env = EnvGen.kr(Env.perc(0.01, dur), doneAction: 2);
|
||||||
|
|
||||||
|
// Pan modulation
|
||||||
|
pan = LFNoise1.kr(0.2).range(-1, 1); // Slow panning for stereo movement
|
||||||
|
|
||||||
|
// Combine the oscillators and noise into a timbre
|
||||||
|
sig = osc1 + osc2 + noise;
|
||||||
|
sig = sig * env * amp; // Apply amplitude envelope
|
||||||
|
|
||||||
|
// Output the sound with pan control
|
||||||
|
Out.ar(out, Pan2.ar(sqig, pan));
|
||||||
|
}).add;
|
||||||
|
)
|
||||||
|
|
||||||
|
// Generate a complex evolving pattern with rhythmic cycles and modulation
|
||||||
|
(
|
||||||
|
Pbind(
|
||||||
|
\instrument, \fellGenerative,
|
||||||
|
\amp, Pwhite(0.2, 0.6, inf), // Random amplitude
|
||||||
|
\freq, Pwhite(100, 1000, inf), // Random base frequencies
|
||||||
|
\dur, Pseq([0.3, 0.5, 1, 0.7], inf), // Rhythmic durations
|
||||||
|
\mod, Pwhite(0.2, 1.5, inf) // Random modulation depth for oscillators
|
||||||
|
).play;
|
||||||
|
)
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
(
|
||||||
|
{
|
||||||
|
var primes, interval, seq;
|
||||||
|
// Define a list of prime numbers
|
||||||
|
primes = [2, 3, 5, 7, 11, 13, 17, 19];
|
||||||
|
|
||||||
|
// Use primes to define a rhythmic pattern
|
||||||
|
seq = Pseq(primes, inf); // Repeat indefinitely
|
||||||
|
|
||||||
|
// Trigger a note every prime number of beats
|
||||||
|
Pbind(
|
||||||
|
\freq, 60.midicps,
|
||||||
|
\dur, seq,
|
||||||
|
\amp, 0.1
|
||||||
|
).play;
|
||||||
|
}.fork;
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
(
|
||||||
|
{
|
||||||
|
var primes, pitchSeq, sig;
|
||||||
|
primes = [2, 3, 5, 7, 11]; // List of primes
|
||||||
|
pitchSeq = Pseq(primes, inf).collect { |prime| 60 + prime }; // Map primes to pitch offsets
|
||||||
|
|
||||||
|
// Create a sequence of pitches based on the primes
|
||||||
|
Pbind(
|
||||||
|
\freq, pitchSeq.midicps,
|
||||||
|
\dur, 0.5,
|
||||||
|
\amp, 0.1
|
||||||
|
).play;
|
||||||
|
}.fork;
|
||||||
|
)
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
~track = "/Users/lcoogan/Music/Musicians/Xiu Xiu/01-xiu_xiu-sad_pony_guerilla_girl-sge.opus".standardizePath; ~bpm=116.6;
|
||||||
|
~track = "/Users/lcoogan/Music/Musicians/Broadcast/broadcast - tender buttons (2005)/05 - Tears in the Typing Pool.opus".standardizePath; ~bpm=145.1;
|
||||||
|
~looplen = 480/~bpm;
|
||||||
|
|
||||||
|
|
||||||
|
b = Buffer.cueSoundFile(s, ~track, 0, 2);
|
||||||
|
x = { DiskIn.ar(2, b) }.play;
|
||||||
|
|
||||||
|
// Now the thing that will attempt to separate them out again (inc a buffer for it to use):
|
||||||
|
~loopbuf = Buffer.alloc(s, 1000, 513);
|
||||||
|
(
|
||||||
|
y = { |which=1, active=1, thresh=1|
|
||||||
|
var son = In.ar(0);
|
||||||
|
var chain = FFT(LocalBuf(1024), son);
|
||||||
|
chain = PV_ExtractRepeat(chain, ~loopbuf, ~looplen, memorytime:30, which:which, thresh:thresh);
|
||||||
|
ReplaceOut.ar(0, Select.ar(active, [son, IFFT(chain)]).dup);
|
||||||
|
}.play(x, addAction: \addAfter);
|
||||||
|
)
|
||||||
|
y.set(\which, 0) // focus on the nonrepeating bit
|
||||||
|
y.set(\which, 1) // focus on the repeating bit
|
||||||
|
y.set(\active, 0) // back to normal
|
||||||
|
y.set(\active, 1) // filter it again
|
||||||
|
y.set(\which, 0, \thresh, 1.5) // trying a higher threshold
|
||||||
|
|
||||||
|
y.free;
|
||||||
|
x.free;
|
||||||
|
b.close
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
~track = "/Users/lcoogan/Music/Musicians/Xiu Xiu/01-xiu_xiu-sad_pony_guerilla_girl-sge.opus".standardizePath;
|
||||||
|
|
||||||
|
~track = "/Users/lcoogan/Music/Musicians/Suicide/1977 - Suicide [1998 Reissue]/01 Ghost Rider.opus".standardizePath;
|
||||||
|
~bpm = 191;
|
||||||
|
|
||||||
|
~track = "/Users/lcoogan/Music/Musicians/My Bloody Valentine/Loveless/05 When You Sleep.opus".standardizePath;
|
||||||
|
~bpm = 90;
|
||||||
|
|
||||||
|
~bpm = 116.6;
|
||||||
|
~looplen = 480 / ~bpm;
|
||||||
|
|
||||||
|
~track = "/Users/lcoogan/Music/Musicians/Broadcast/broadcast - tender buttons (2005)/05 - Tears in the Typing Pool.opus".standardizePath; ~bpm=145.1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
b = Buffer.cueSoundFile(s, ~track, 0, 2);
|
||||||
|
x = { DiskIn.ar(2, b) }.play;
|
||||||
|
|
||||||
|
~loopbuf = Buffer.alloc(s, 1000, 513); // Make sure loopbuf is allocated
|
||||||
|
|
||||||
|
(
|
||||||
|
y = { |which=1, active=1, thresh=1|
|
||||||
|
var son = In.ar(0);
|
||||||
|
var chain = FFT(LocalBuf(1024), son);
|
||||||
|
chain.postln; // Debug: Check the FFT output
|
||||||
|
chain = PV_ExtractRepeat(chain, ~loopbuf, ~looplen, memorytime:30, which:which, thresh:thresh);
|
||||||
|
ReplaceOut.ar(0, Select.ar(active, [son, IFFT(chain)]).dup);
|
||||||
|
}.play(x, addAction: \addAfter);
|
||||||
|
)
|
||||||
|
|
||||||
|
y.set(\which, 0) // Focus on non-repeating part
|
||||||
|
y.set(\which, 1) // Focus on repeating part
|
||||||
|
y.set(\active, 0) // Switch back to original signal
|
||||||
|
y.set(\active, 1) // Apply filter
|
||||||
|
y.set(\which, 0, \thresh, 1.5) // Try a higher threshold
|
||||||
|
|
||||||
|
y.free;
|
||||||
|
x.free;
|
||||||
|
b.close;
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
(
|
||||||
|
SynthDef(\voiceEvolving, {
|
||||||
|
arg out=0, bufnum, amp=0.5, windowSize=1024;
|
||||||
|
var in, chain, sig;
|
||||||
|
var smearAmt, shiftAmt, wipeTrig;
|
||||||
|
|
||||||
|
in = PlayBuf.ar(1, bufnum, BufRateScale.kr(bufnum), loop: 1);
|
||||||
|
|
||||||
|
// FFT processing
|
||||||
|
chain = FFT(LocalBuf(windowSize), in);
|
||||||
|
|
||||||
|
// Slowly changing modulation sources
|
||||||
|
smearAmt = LFNoise1.kr(0.1).range(5, 50); // how smeared the spectrum is
|
||||||
|
shiftAmt = LFNoise1.kr(0.07).range(-30, 30); // shifting bins in pitch space
|
||||||
|
wipeTrig = Dust.kr(0.3); // occasional spectral dropouts
|
||||||
|
|
||||||
|
// PV mutations
|
||||||
|
chain = PV_MagSmear(chain, smearAmt);
|
||||||
|
chain = PV_BinShift(chain, shiftAmt);
|
||||||
|
chain = PV_RandWipe(chain, wipeTrig);
|
||||||
|
|
||||||
|
sig = IFFT(chain) * amp;
|
||||||
|
|
||||||
|
// Optional: gentle filtering
|
||||||
|
sig = LPF.ar(sig, 1000);
|
||||||
|
|
||||||
|
Out.ar(out, sig.dup);
|
||||||
|
}).add;
|
||||||
|
)
|
||||||
|
|
||||||
|
Synth(\voiceEvolving, [\bufnum, b, \amp, 0.4]);
|
||||||
Loading…
Reference in New Issue