here are some routines guaranteed to drive your significant other crazy. based on a julia set equation (loosely: it's essentially one dimension's movement...)
SynthDef("impComb2", { arg freq=1, pan=0, dur=1.0, lev=1;
var env, out;
env = EnvGen.ar(Env.perc(0.001, 1, 1, -8),
levelScale: lev, timeScale: dur, doneAction:2);
out = Pan2.ar(Mix.ar(CombL.ar(Impulse.ar(0.1),0.01,freq,2)), pan);
Out.ar(0, out*env);
}).load(s);
SynthDef("klankThangX2", { arg out=0,trig, level, freq, time = 1,
panPos=0, noiseRate=0.2, rq=0.1;
var klank, harm, amp, ring, env, mix;
harm = Control.names([\harm]).ir(Array.series(4,1,1));
amp = Control.names([\amp]).ir(Array.rand(4,0.25, 0.7));
ring = Control.names([\ring]).ir(Array.fill(4,1));
klank =
Pan2.ar(Klank.ar(`[harm,amp,ring],Decay.ar(Impulse.ar(trig, 0),
0.001, 0.1, 0.1), freq, 0.1), panPos);
env = EnvGen.ar(Env.perc(0.01, time, level, 4), doneAction: 2);
mix = RLPF.ar(klank, LFNoise2.kr(noiseRate, 700, 1500), rq);
Out.ar(out, (mix*env).softclip);
}).load(s);
SynthDef("bufPlayer", { arg panPos=0, rate = 1, bufnum = 0,
startPos=0.0, time=1.0, envLev=1.0, loopLength=1, outBus=0;
var out, eg, triggerer;
triggerer = Impulse.kr(loopLength.reciprocal);
eg = EnvGen.kr(Env.new([0,1,1,0],[0.1,0.8,0.1], 'welch'),
timeScale: time, levelScale: envLev, doneAction: 2);
out = Pan2.ar(PlayBuf.ar(1, bufnum, rate, triggerer,
startPos, loop: 1), panPos);
Out.ar(outBus, out*eg);
}).load(s);
SynthDef("ping", { arg freq=400, dur=1, lev=0.8, panPos=0, out=0;
var source, env;
source = Pan2.ar(Ringz.ar(PinkNoise.ar(0.01),freq, 0.3), panPos);
env = EnvGen.ar(Env.perc(0.001, 1, 1,-8), levelScale:lev, timeScale: dur, doneAction:2);
Out.ar(out, source*env);
}).load(s);
(
//b = Buffer.read(s,"/home/jes/Sounds/metalthing.aif");
g=Group.new;
Routine({ arg i;
var z,c;
z=0;
c=1;
loop({
z=((z-c).abs.sqrt)*[1,-1].choose;
Synth.head(g, \impComb2, [
\freq, (74+z.ratiomidi).midicps.reciprocal,
\dur, z.abs,
\lev, rrand(0.5,0.7),
\pan,1.0.rand2,
\out, 0
]);
((z.abs)*0.25).wait;
});
}).play;
j=Group.new;
Routine({ arg i;
var z,c;
z=0;
c=1;
loop({
n =[3,4,5,7,11,13].choose;
z=((z-c).abs.sqrt)*[1,-1].choose;
Synth.head(j, \klankThangX2, [
\freq, (50+z.ratiomidi).midicps,
\time, z.abs+0.1,
\level, rrand(0.15, 0.25),
\noiseRate, rrand(0.5, 3),
\rq, rrand(0.05, 0.3),
\panPos, 0.3.rand2,
\out, 0
],
[\n_setn, -1, \harm, n] ++ Array.series(n,1,1),
[\n_setn, -1, \amp, n] ++ Array.rand(n,0.25, 0.7),
[\n_setn, -1, \ring,n] ++ Array.fill(n,1.0.rand+0.125)
);
z.abs.wait;
});
}).play;
/*
h=Group.new;
Routine({ arg i;
var z,c, nextTime;
z=0;
c=0.8;
loop({
z=((z-c).abs.sqrt)*[1,-1].choose;
nextTime = (z.abs)*0.5;
Synth.head(h, "bufPlayer",[
\bufnum, b.bufnum,
\time, nextTime,
\startPos, 0,
\rate, z,
\envLev, rrand(0.3, 0.5),
\loopLength, z,
\panPos, 0.7.rand2,
\outBus, 0
]);
nextTime.wait;
});
}).play;
*/
h=Group.new;
Routine({ arg i;
var z,c, nextTime;
z=0;
c=0.8;
loop({
z=((z-c).abs.sqrt)*[1,-1].choose;
nextTime = (z.abs)*0.5;
Synth.head(h, "ping",[
\dur, nextTime,
\freq, (74+z.ratiomidi).midicps,
\lev, rrand(0.7, 1.0),
\panPos, 0.7.rand2,
\out, 0
]);
nextTime.wait;
});
}).play;
)
/*
authors so far:
jonathan segel
*/