klipp av logo

some supercollider code to generate old school klipp av logos.

click the window in the sc code to generate new pictures.

        var width= 800, height= 600;
        var win, usr, p0, p1, l= 50, w= 10, h= 15, c= 0.9, o= 0.1;
        win= Window("nystan", Rect(128, 64, width, height), false);
        usr= UserView(win, Rect(0, 0, width, height));
        usr.mouseDownAction= {usr.refresh};
        usr.background= Color.new255(51, 47, 57);
        usr.drawFunc= {
                Pen.translate(width*0.5, height*0.5);
                        var p, pp1, len;
                        p0= Point(0, 0);
                        p1= Point(0, h.rand*10.linrand);
                        pp1= p1;
                                len= l+l.rand2;
                                Pen.color= Color(c, c, c.rrand(1.0), (1-c).rrand(1.0));
                                if(o.coin, {
                                        p= 200.rand;
                                        p0= p0+p;
                                        p1= p1+p;
                                }, {
                                        p0= p0+Point(len+w.rand2, h.rand);
                                        p1= p1+Point(len+w.rand2, h.rand);
                        Pen.lineTo(Point(0, 0));
        CmdPeriod.doOnce({if(win.isClosed.not, {win.close})});

sunday drawings

2006 i fiddled with some simple drawing routines in sc. (http://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.

s.latency= 0.05;
        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));
        w= Window("sunday drawings2", Rect(128, 64, width, height), false);
        drawFunc= {
                var x, y;
                if(i==0, {
                                \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);
                                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), {
                        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
        u= UserView(w, Rect(0, 0, width, height))
        u.animate= true;
        CmdPeriod.doOnce({if(w.isClosed.not, {w.close})});
        w.onClose= {syn.free};

ipod touch microphone

i bought the klinkenstecker 3,5mm 4pol for €2,40 from segor.de. the capsule microphone i had laying around. sorry no data or idea where i got it. the whole thing is very simple to build and the sound is totally allright. now i can record into the ipod thouch and run apps like rjdj and supercollider with audio input.

sc140 - the sctweets album

i'm proud to have contributed with one short track on the just released CC BY-NC-SA 3 licensed album sc140. download/listen here. it is compiled by dan stowell and consists of 22 tracks with corresponding supercollider source code. the thing with this project is that all the tracks are written to fit within the twitter limitation of 140 characters. read the source code here

reference: 140 character examples



for our recent installation at iscm world new music days in växjö (www.musicalfieldsforever.com/searching_voices_conc.html), i built a circuit for controlling 9x5m el-wire (electroluminescence). there are 9 channels in total and 3 inverters that are powering three 5meter cables each. tic201d triacs are used for switching the 110v ac on/off, 9 led+ldr pairs (aka vactrol) generates the control voltage for the triacs and wireless control for the whole thing is obtained with an atmega8 and a pair of nordic transceivers. supercollider is generating the control data.

el-wire_9ch_triacs from redFrik on Vimeo.

Image icon el-wire_9ch_triacs.png39.79 KB
Binary Data el-wire_9ch_triacs.sch95.41 KB

intel vs ppc

update 090811: thanks to batuhan bozkurt for putting me straight. it's not an intel vs ppc issue but rather apple changed something in their internal soundcards. using a newer (intel) machine and an external soundcard (fireface 400), the punk code sounds the same as the ppc version below (ie good/better in my ears - no autocompression).
so the internal soundcard in my old powerbook (1ghz, ppc) is robust, filters hardly ever blows up and it doesn't have that automatic compressor/limiter as my newer macbook pro (2.16ghz duo, intel) internal soundcard.

--original post:
something i knew all along but tried to ignore: many of my noisier synths sounds like crap on modern (intel) macintoshes and some even goes all silent. the code below deliberately blows up a resonant hipass filter and is typical for how different the same code can sound on my intel vs my ppc mac. listen to the attached mp3 files. in a few years all the ppc computers will be gone and we can't recreate the sounds.

//punk (loud!)
Audio icon punk_intel.mp3759.55 KB
Audio icon punk_ppc.mp31.48 MB


more custom electronics. a wireless system for our flute/video duo kretslopp (together with flutist anna svensdotter).
3 knobs and 3 buttons on the right hand arm, 1 accelerometer (3d) on the left hand arm.
anna made the leather bracelets.

attached is schematics, avr firmware and a max/msp patch for testing.

update 090823: also attached supercollider classes

wireless slave and usb master...

overview. controllers, master, slave and 'bracelet'.


a cheap little circuit that reads 10 analog controllers (8 knobs and 1 joystick). i built it for my neighbour jens' portable keyboard project. it's using an atmega88 and a 4051 multiplexer to get 10 analog-to-digital converters. a standard max232 with some caps lets the atmega88 talk to the serial port of the computer.
attached is schematics, avr firmware and a max/msp patch for testing.

Package icon jensKeyboard.zip65.23 KB


Subscribe to f0blog RSS