Category: Coding

Study on Hexagons, purely SuperCollider.

[vimeo 11722654 nolink]


The soundBlox as they currently look like.

layout screenshot
Inspired on a layout of dhub over at the snyderphonics forum, I created a layout page for the manta.
I decided to have a big pdf scheme for scribblings and a four-on-a-page version in case you want to have four “pages” on your manta (e.g. to be switched with the upper right buttons). Here is the LFSaw Manta Layout.
These two pdfs (1pager, 4pager) are editable in Illustrator (> CS3), so please feel free to modify them to your needs.
I would enjoy to find your derivations in the comments below.

[ Forum Thread, LFSaw Manta Layout, 1pager, 4pager ]

The Manta controller has 48 pads, 4 buttons and 2 sliders.
In OSC mode, it sends for each button/pad values between 0 and 170 depending on the ohmic resistor value between ground and cc via your finger.
Each slider has a resolution of 4000 values.
It is also capable to send standard midi.
There will be a supercollider class for it, too.

And I’ll get one on wednesday!

[Snyderphonics]

Featuring 22 Tracks by many Artists; all done in 140characters of supercollider code.
Hear its varieties and creative potential here.
One of the tracks is by myself.
Enjoy

[track home]
Thanx, Dan, for your editing and compilation efforts. Tracks are released under CC BY-NC-SA 3; artwork CC-BY by Lola TC.

soundBlox

Last week we did first investigations in a new installation at Animax, Bonn. It is called audioDome soundBlox.

Which category? The community suggests “Most likely to change the way you do everything”.

Me likes that.

Great to see how other people use sc. Thanx for sharing, Marije!

Code LiveCode Live – Greyhound

[From nescivi.nl » Downloads]

2009-SoundCommunication.jpgToday, I stumbled across this article that investigates into using sound as a transfer medium for digital information.

Though this is actually a very old and commonly used method for transferring files back in the 90s (we did this via tty telephone modems), it is kind-of pleasing to see this idea popping up again, and triggered some thoughts about it’s usefulness in cooperative livecoding situations.  

Yes, it would be really fun not have to setup wireless LAN that invisibly and–for the audience–almost magically transfer information from one laptop to another, and, instead, having some sort of musical/non-aweful sound that transmit additional information from one laptop to another.

I wonder if anyone ever thought of this in the SuperCollider / LiveCoding community, but I think it’s worth!

Added Python Interactive Mode to github.

Git seems to be a cool tool. It gets even better with the corresponding textmate bundle. Anyone knows which public host for git-repos to prefer? ATM I see github and gitourious.

Feedback welcome…

I hereby release TM_InteractivePython.

It is a TextMate Bundle implementing REPL for python. Feedback welcome.
A big thanx goes to technotales for explanation of REPL-modes for vim, and Renick for ponting me to REPL, and of course the SuperCollider community, which inspired me to look for such a way to get python REPL’y to work in TextMate.

Download Instructions here



CC-GNU GPL

This software is licensed under the CC-GNU GPL version 2.0 or later.

Though my copy of quicksilver says there is no new quicksilver release around, there is.

I am really happy that some guys are working on it and doing bug tracking and further development. To be hinest, I could not work with my computer without quicksilver.

So, keep on movin’!

200901191510.jpg

This patch extracts color values from the kuler api via a themeID and converts them to Color objects.

It requires 
- the XML quark by Jens Gulden (wow! thanx) for parsing the xml stuff and
- the wslib quark by wouter snoei (wow, too!) for Meta_Color:newHex
- a valid kuler dev-key (see http://kuler.adobe.com/api/ for details)


// Process Kuler rss feed for Color extraction

(
~getFeed = {
arg
fileName,
kulerKey, // insert your kuler key
themeID(347630); // ID of a kuler theme

"curl \"http://kuler-api.adobe.com/rss/search.cfm?itemsPerPage=20&startIndex=0&searchQuery=themeID:%&key=%\" > /tmp/%"
.format(themeID, kulerKey, fileName).unixCmd;
};
~xml2color = {|fileName|
DOMDocument("/tmp/%".format(fileName))
.getElementsByTagName("kuler:swatch")
.collect{|swatch|
swatch.getElementsByTagName("kuler:swatchHexColor")
.collect(_.getText)
}.flatten.collect{|str|
Color.newHex(str)
}
};
~tidy = {|fileName|
"rm /tmp/%".format(fileName).unixCmd;
};
~show = {|color, bounds(Rect(30,300, 100, 30))|
var window;
var extent = bounds.extent.asArray;
window = Window.new("ColorTest", bounds, false);
window.drawHook = {
3.do{|i|
Pen.color = Color.gray(i * 0.5);
Pen.fillRect(
Rect.fromArray([i*(extent.first/3),0] ++
(extent * [1/3, 1]))
);
};
Pen.color = color;
Pen.fillRect(Rect.fromArray(extent*0.1 ++ extent * 0.8));
};
window.front;
}
)
(
{
~fileName = "%.xml".format(Date.getDate.stamp);
~getFeed.value(~fileName, "your Kuler key here");
2.wait;
"less /tmp/%".format(~fileName).unixCmd;
a = ~xml2color.value(~fileName);
1.wait;
~tidy.value(~fileName)
}.fork;
)

a.do{|c| ~show.(c)}

teaser.png

Too Many Gadgets is a live-coding group that attempts to capture the relationship of space, sound and vision. Their latest project …between… was shown at the Nacht der Klänge 2008 at Bielefeld University.

[ Too Many Gadgets]

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

[Knuth, Donald. Structured Programming with go to Statements, ACM Journal Computing Surveys, Vol 6, No. 4, Dec. 1974. p.268.]

Check out the SenseWorld quark by Marije for longterm analysis of time-based r/t data. Analysis, Windowing, everything in its place. Wonderful.

Thanx Marije!

I always wondered about how radio waves look like. This student project at AHO gives an expression of it… wow.

[ nearfield ]

Awesome simple; Simply awesome.

q = ();
s.boot;

// get sounds
q.soundFiles = SoundFile.collect(
"/localvol/sound/share/audiosamples/freesound/birdsong/*.wav"
);

// play back in order of their appearance
Pseq(q.soundFiles.collect{|file| file.cue((\dur: file.duration))}, 1).play;

[this particular example plays back files downloaded from a freesound samplepack]

Together with Julian Rohrhuber I will present an interactive tangible sound-installation called “Das Durcheinander als Interface” at the Animax on Saturday, 2007-11-17.
In case of interest, please feel free to join and have a touch at it.

Lfsaw-Scwiki
A word cloud for SuperCollider3 on osX regarding all open documents excluding this one and the post window.
The Picture shows the research part of my supercollider wiki.


(
var index = 0, size, bj = 0;

a = Document.allDocuments.asSet
.remove(Document.current)
.remove(Document.post).collect{|doc|

doc.string.stripRTF
//.toLower
// replace \n, \t with blank
.tr($\t, $ ).tr($\n, $ )
// remove paren
.tr($(, $ ).tr($), $ ).tr(${, $ ).tr($}, $ ).tr($[, $ ).tr($], $ )
// remove *:,.?
.tr($*, $ ).tr($:, $ ).tr($,, $ ).tr($., $ ).tr($?, $ )
.tr($/, $ )
.split($ )
// reject stopwords < 4 chars (including " ")
.reject{|str| str.size < 4}
}.asArray.flatten.sort;

size = a.size;
b = Array.fill(size, "");
c = Array.fill(size, 1);

while({index < (size-1)}, {
b[bj] = a[index];
((a[index].toLower) == (a[index+1].toLower)).if({
c[bj] = c[bj] + 1;
}, {
bj = bj + 1;
});
index = index+1;
});
c = [c, b].flop.reject{|it| it.last == ""}.sort({|a, b| a.first < b.first});
)

d = c.select{|chunk| chunk.first > 2 }

(
var win, extX, extY, winRect, view, fontName,
chunks, countSpec, sizeSpec, alphaSpec, colorSpec;
chunks = d;
countSpec = [chunks.flop.first.minItem, chunks.flop.first.maxItem].asSpec;
sizeSpec = [10, 160].asSpec;
alphaSpec = [1, 0.2].asSpec;
colorSpec = [0.2, 1].asSpec;

extX = 800;
extY = 600;
winRect = GUI.window.screenBounds;

fontName = "GillSans-Light";

win = GUI.window.new("", winRect, border: false);
win.view.keyDownAction_{|me, char|
(char == $q).or{char == 27.asAscii}.if{win.close}
};
win.view.background = Color.white;

view = GUI.userView.new(win, win.view.bounds);
view.drawFunc = {
var str, numAppearance, val;
chunks.do{|chunk, i|
# numAppearance, str = chunk;
val = countSpec.unmap(numAppearance);

str.drawCenteredIn(
Rect((extX+200).rand, (extY-100).rand, 400, 350),
Font(fontName, (sizeSpec.map(val)).asInteger),
Color.red(colorSpec.map(val), alphaSpec.map(val))
);
};
};
view.keyDownFunc_(win.view.keyDownAction);
win.fullScreen;
win.front;
win.view.focus
)


(
~duau.play;
~duau = {|t_gate = 0, t_gate2 = 0, freq = 80|
var src;
src = SinOsc.ar(
Phasor.ar(t_gate, [20, 21], freq, 10),
pi,
2
).softclip.sum;

src = CompanderD.ar(src, src,
thresh: EnvGen.ar(Env([0,1,0], [0.1, 0.1]), gate: t_gate),
slopeBelow: 0.022,
slopeAbove: 0.1,
clampTime: 0.2,
relaxTime: 0.00002
) * EnvGen.ar(Env([0,1,0], [0.0001, 2]), gate: t_gate2)!2;
src.softclip
}
)
~duau.set(\t_gate, 1, \t_gate2, 1, \freq, 76)
~duau.set(\t_gate, 1, \t_gate2, 1, \freq, 96)

Technorati Tags: ,

Done without the function posted in the last post, but I like it anyhow:


s.boot;
p = ProxySpace.push(s);
ProxyMixer(p)
History.start;

~tacker.clear
~tacker.fadeTime = 10;
~tacker = {|amp = 0.1, freq = 60|
var in;
var lf = {LFSaw.ar(Phasor.ar(
Impulse.ar(2/5, 2.0.rand),
120,
1,
TRand.kr(0.5 * freq, freq, Impulse.ar(50))
))}!10;
in = lf.collect{|lf|
(Impulse.ar(lf.exprange(15, 1000)) * lf.range(0.1, 1))
}.sum * 0.1;
(Pan2.ar(in, WhiteNoise.ar(1)) * 20 * amp).softclip
}
~tacker.play

~filta = {|freq = 10000, rq = 0.1|
RLPF.ar(~tacker.ar, freq, rq)
}

Spec.add(\wet, [0, 1].asSpec)
~outa = {|wet = 0.1| (wet * ~filta.ar) + ((1-wet) * ~tacker.ar)}
~cutta = {
~outa.ar * LFPulse.ar(Line.kr(10, 20, 300))
}

Spec.add(\dt, [0, 1].asSpec)
~tacker1 = {|dt = 0.2| DelayN.ar(~cutta.ar, 1, dt)}
p.free(10)

Technorati Tags: , ,

sometimes it makes sense to practice livecoding. In order not to use the same UGens and Patterns over and over again, I wrote this little recurrent function which collects all available UGens and chooses one for you to use.

f = {|ugen|
ugen.subclasses.notNil.if({
ugen.subclasses.collect({|ugen| f.(ugen)}) ++ [ugen]
}, {
[ugen]
})
}

f.(UGen).flat.choose

enjoy!

Update: redFrik pointed me to this little patch AdC wrote some time ago. It is much fancier then mine, but you have to post your solutions and score here.

[ redFrik | AdC | livecoding ]

Run cron-jobs manually on OS X

sudo periodic daily;
sudo periodic weekly;
sudo periodic monthly;

Spcoloris-Blumengiessen-Klein
On Friday, 15th of June, René Tünnermann, Matthias Zenker and myself will present the latest in sonobotanics, an exhibition of Spiritus Coloris, a colorvorous plant normally invisible and not perceivable vegetable form of life. More information may be found here.

Update:
It was much work, but in the end it was really great! Thanx to all participating and experiencing and believing in and to Sp.Coloris. Pictures and sounds (and videos?) will follow soon.

[ Sonobotanics home | Exhibition home | in this blog ]

Technorati Tags:

If you’re building a house that you plan to live in for a few decades, you’d better make sure it has a good framework. Live coding is more like making a fort out of cardboard boxes — it goes up REALLY FAST and you have a hell of a lot of fun playing in it, and when the game’s over, nobody cares if it falls down 2 seconds later.

[ James Harkins, in a mail to the sc users mailinglist on mai, 31 2007 17:27:04 MESZ ]


The Framework for TUIO-based tangible computing with SuperCollider now is called SETO – SuperCollider Environment for Tangible Objects.

You may install it in SuperCollider by evaluating

Quarks.checkoutAll;
Quarks.install("TUIO") // still the old name...

and then restarting the interpreter.
If you have a GUI app (Cocoa or SwingOSC atm.) you may want to use TUIOServer:gui to see the recognized objects and their states.
More information can be found at the SETO home and the TUIO home.
Have fun and feel free to contact me if something isn’t working right.

[SETO home | TUIO home]