packages feed

hsc3-graphs-0.15: gr/griot.scd

// griot modeling (jmcc)

{
    // maximum delay time
    var maxdt = Server.default.sampleRate * 0.03;
    // number of delay lines
    var n = 5;
    // allocate buffers for the delay lines
    var buf = Array.fill(n, { LocalBuf.newFrom(Array.fill(maxdt,0)); });
    // assign tap times which determine the string pitches
    var tapTimes = Array.series(n, 0.003, 0.0005);
    // excitation (brownian in place of jmcc melody function...)
    var exc_env = Env.new([0,1,0], [0.01, 0.2], -2);
    var exc_trig = Impulse.kr(n,0);
    var exc_ch = Demand.kr(exc_trig,0,Dbrown(0,n-1,1,inf));
    var exc_fr = MouseY.kr(10, 10000);
    var exc_sg = LFNoise2.ar(exc_fr, EnvGen.kr(exc_env, exc_trig, 0.1.rand));
    var exc = n.collect({arg i; exc_sg * ((exc_ch - i).abs < 1)});
    // tap the delay lines
    var del = n.collect({arg i; Tap.ar(buf[i], 1, tapTimes[i])});
    // filter the taps
    var flt = LPF.ar(del, MouseX.kr(10, 10000), 0.98);
    // write to delay lines
    n.do({arg i; RecordBuf.ar(flt[i] + exc[i],buf[i])});
    Mix.ar(flt);
}.play