supercollider
OpenObject tutorials
Submitted by f0 on Wed, 2010-03-31 19:487 short screencasts with code examples showing how to connect supercollider with max/pd/processing using the openobject quark.
download the example code here... http://www.subnet.at/content/supercollider-tutorials-0
note that to run all the examples you'll need sc, max5, pd and processing installed.
these screencasts were made at the 10days of SuperCollider network music workshop at subnet, salzburg, october 2009.
openobject quark by julian rohrhuber, tutorials by fredrik olofsson, voiceover and support by max kickinger.
thanks to subnet.at
swiki
Submitted by f0 on Thu, 2010-01-28 23:32just a listing of some of the supercollider code i've published on the swiki. much is old but still fully functional and hopefully useful.
http://swiki.hfbk-hamburg.de:8888/MusicTechnology/743 - 3d extensions for the Pen class. vector and matrix multiplication.
http://swiki.hfbk-hamburg.de:8888/MusicTechnology/760 - 1d cellular automata pattern.
http://swiki.hfbk-hamburg.de:8888/MusicTechnology/818 - livecoding practice sessions.
http://swiki.hfbk-hamburg.de:8888/MusicTechnology/854 - more livecoding practice sessions.
http://swiki.hfbk-hamburg.de:8888/MusicTechnology/763 - tempo clock synchronisation and beat matching.
http://swiki.hfbk-hamburg.de:8888/MusicTechnology/833 - some drawings.
http://swiki.hfbk-hamburg.de:8888/MusicTechnology/901 - examples ported from nodebox.
http://swiki.hfbk-hamburg.de:8888/MusicTechnology/902 - examples ported from processing.
http://swiki.hfbk-hamburg.de:8888/MusicTechnology/726 - quicklauncher folder gui.
http://swiki.hfbk-hamburg.de:8888/MusicTechnology/810 - hacked server windows.
http://swiki.hfbk-hamburg.de:8888/MusicTechnology/870 - a silly drummachine.
http://swiki.hfbk-hamburg.de:8888/MusicTechnology/869 - port of particle chamber by derek holzer.
klipp av logo
Submitted by f0 on Mon, 2009-12-28 19:09some 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);
win.front;
usr.drawFunc= {
Pen.translate(width*0.5, height*0.5);
5.rrand(20).do{
var p, pp1, len;
Pen.rotate(pi.linrand);
p0= Point(0, 0);
p1= Point(0, h.rand*10.linrand);
pp1= p1;
(20.linrand).do{|i|
len= l+l.rand2;
Pen.color= Color(c, c, c.rrand(1.0), (1-c).rrand(1.0));
Pen.moveTo(p0);
Pen.lineTo(p1);
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(p1);
Pen.lineTo(p0);
Pen.draw(0);
};
Pen.moveTo(p0);
Pen.lineTo(p1);
Pen.lineTo(pp1);
Pen.lineTo(Point(0, 0));
Pen.draw(5.rand);
};
};
CmdPeriod.doOnce({if(win.isClosed.not, {win.close})});
)

sunday drawings
Submitted by f0 on Fri, 2009-11-27 15:522006 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;
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;
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
theta= 0;
Pen.fillColor= Color.grey(0, 5/fadeRel);
Pen.fillRect(Rect(0, 0, width, height));
};
clearFunc.value;
u= UserView(w, Rect(0, 0, width, height))
.clearOnRefresh_(false)
.drawFunc_(drawFunc)
.background_(Color.black);
w.front;
Routine({while({w.isClosed.not}, {u.refresh; (1/60).wait})}).play(AppClock);
CmdPeriod.doOnce({if(w.isClosed.not, {w.close})});
w.onClose= {syn.free};
};
)
sc140 - the sctweets album
Submitted by f0 on Wed, 2009-10-21 13:51i'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
intel vs ppc
Submitted by f0 on Tue, 2009-08-11 03:10update 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.
{RHPF.ar(GbmanN.ar([2300,1150]),LFSaw.ar(Pulse.ar(4,[1,2]/8,1,LFPulse.ar(1/8)/5+1))+2)}.play
RedPDU
Submitted by f0 on Mon, 2009-07-27 17:52livecoding via sms anyone? an expensive and annoyingly hard hobby for sure.
but the RedPDU supercollider class makes this possible in any case. it can decode mobile phone text messages in the pdu format. and with a serial connection to your phone (bluetooth or cable), it is easy to directly download incoming sms from your phone into supercollider and interpret them. no additional hardware required.
the class is available here. (there is also a mxj java version for max/msp called f0.pdu here)
and here's a short demo video where i send a short message to myself...
the code i texted in this video was...
and the sc receiver function is in the helpfile. but note: on many phones it is impossible to type characters like {} [] \ | etc. you might want to add some find&replace functionality and use <> meaning curly brackets etc.
sort of unicode support for sc
Submitted by f0 on Wed, 2009-05-27 20:51this is a big ugly hack and gives far from complete support for these special characters. but still it is useful in some situations like for buttons or comment boxes in your gui.
w= Window(Umlaut.fix("åäö test"), Rect(100, 200, 150, 150));
Button(w, Rect(10, 20, 130, 40)).states_([[Umlaut.fixAll("schööön")]]);
Button(w, Rect(10, 70, 130, 40)).states_([[Umlaut.fixAll("Tätigkeit heiß")]]);
w.front;
)

all supported characters... (more can be added on request)
update: there is also asciiCorrect in the wslib quark by wouter snoei