//time slot walks under mouse control
//jrh 2000
(
var path, sf,sr, signal, funk, size, zoom, stream, dstream;
var fstream, fpat, pat, dpat, blendpat, blendstream;
var pstrange, strange;
var arr, n;
var w, sv;
w = GUIWindow.new("(\\)", Rect.newBy(407, 199, 400, 251));
sv = SignalView.new( w, Rect.newBy(47, 40, 289, 150), nil, -1, 1);
path = ":sounds:floating_1"; //replace.
sf = SoundFile.new;
sf.read(path);
signal = sf.data;
size = signal.at(0).size;
sr = sf.sampleRate;
sv.signal_(signal.at(0));
zoom = size / 300;
sv.zoom = zoom;
funk = { arg start, end, rate=1, sustain, blend;
var env, env2, st, en;
env = Env.linen(0.01, 0.8, 0.2);
env2 = Env.linen(0.02, 0.1, 0.8);
st = start*size;
en = end*size;
PlayBuf.ar(signal, sr, rate, st, st, en) * EnvGen2.kr(env, env2, blend, timeScale: sustain)
};
//strange attractor
pstrange = { arg inval; Prout({
i = rrand(0.0, 1);
loop({
i= inval.poll*i*(1-i);
(i).yield;
})
})
};
a = [1, 1.3, 0.9, 2, 0.3, 0.9, 1];
pat = Pseq([0, 0.1, 0.2, 0.5, 0, 0.1], inf);
dpat = Pseq([0.1, 0.1, 0.01], inf);
fpat = Pseq(a, inf);
blendpat = Pseq([0, 0, 0, 1, 0.5], inf);
stream = pat.asStream;
dstream = dpat.asStream;
fstream = fpat.asStream;
blendstream = blendpat.asStream;
{ arg synth;
var my, mx;
my = MouseY.kr(0, 1);
mx = MouseX.kr(0, 0.05);
strange = pstrange.value(3 + my).asStream;
TSpawn.ar({
var st, en, mul;
st = stream.next + my.poll;
en = st + mx.poll;
mul = strange.next;
sv.setSelection((st*size).asInteger, (en*size).asInteger);
funk.value(st, en, fstream.next, en-st * size / sr, blendstream.next) * mul
}, 2, nil, Impulse.ar(8), 0.4)
}.play;
w.close;
)
*****
/*authors so far: jrh */ |