‹ klipp av LogoiPod Touch Microphone ›

Sunday Drawings

2009-11-27 15:52:22 supercollider

2006 I fiddled with some simple drawing routines in SuperCollider. (swiki.hfbk-hamburg.de:8888/MusicTechnology/833). Now I've added matching (?) sound synthesis and some slight modifications to the drawing code. There are 7 parameters that are used to both generate the picture and the sound. Normally the parameters are randomised but it is possible to copy&paste a good sounding/looking set of parameters into the code to get the same drawing back.

Below is the new code + embedded vimeos.

//redFrik
(
s.latency= 0.05;
s.waitForBoot{
    var width= 640, height= 480, w, u, drawFunc, clearFunc;
    var fadeAtk= 1400, fadeSus= 700, fadeRel= 350;
    var a, b, c, d, e, f, g, i= 0, theta= 0;
    var syn= SynthDef(\sunday, {|amp= 0, a= 1, b= 1, c= 1, d= 1, e= 1, f= 1, g= 1|
        var z0= Mix(BPF.ar(LFSaw.ar([a, b]), a+b, e, amp));
        var z1= SinOsc.ar(a, Ringz.ar(z0, c.abs, f, 2pi), amp);
        var z2= SinOsc.ar(b, Ringz.ar(z0, d.abs, g, 2pi), amp);
        Out.ar(0, Pan2.ar(z0, 0, 0.3)+Pan2.ar(z1, -0.3, 0.3)+Pan2.ar(z2, 0.3, 0.3));
    }).play(s);
    s.sync;
    w= Window("sunday drawings2", Rect(128, 64, width, height), false);
    drawFunc= {
        var x, y;
        if(i==0, {
            "//---------------------".postln;
            [
                \a, a, \b, b, \c, c, \d, d, \e, e, \f, f, \g, g
            ].pairsDo{|m, n| (""++m++"="+n++";").postln};
        });
        if(i<fadeAtk, {
            theta= theta+(d*e*f);
            x= sin(theta*a%a/b*c*2pi);
            y= sin(theta*b%b/a*d*2pi);
            Pen.strokeColor= Color.grey(1, 0.5);
            Pen.translate(width*0.5, height*0.5);
            Pen.scale(f, g);
            Pen.rotate(theta);
            switch(a%3,
                0, {Pen.strokeOval(Rect.aboutPoint(Point(x*100, y*100), a, b))},
                1, {Pen.strokeRect(Rect.aboutPoint(Point(x*100, y*100), a, b))},
                2, {Pen.line(Point(x*100, y*100), Point(a*c*100, b*d*100)); Pen.stroke}
            );
            syn.set(\amp, i/fadeAtk, \a, a, \b, b, \c, c, \d, d, \e, e, \f, f, \g, g);
        });
        if(i>(fadeAtk+fadeSus), {
            clearFunc.value;
            theta= 0;
            Pen.fillColor= Color.grey(0, 5/fadeRel);
            Pen.fillRect(Rect(0, 0, width, height));
            syn.set(\amp, i.linexp(fadeAtk+fadeSus, fadeAtk+fadeSus+fadeRel, 1, 0.0001));
        });
        if(i==(fadeAtk+fadeSus+fadeRel), {
            i= 0;
        }, {
            i= i+1;
        });
    };
    clearFunc= {
        
        //--replace with preset from here
        a= 200.rand+1;
        b= 200.rand+1;
        c= 3.0.rand2;
        d= 3.0.rand2;
        e= 3.0.rand;
        f= 0.1.rrand(1.5)*#[1, -1].choose;
        g= 0.1.rrand(1.5)*#[1, -1].choose;
        //--to here
        
    };
    clearFunc.value;
    u= UserView(w, Rect(0, 0, width, height))
        .clearOnRefresh_(false)
        .drawFunc_(drawFunc)
        .background_(Color.black);
    w.front;
    u.animate= true;
    CmdPeriod.doOnce({if(w.isClosed.not, {w.close})});
    w.onClose= {syn.free};
};
)
‹ klipp av LogoiPod Touch Microphone ›