Chords & Cracks
Chords & Cracks
Translating paintings in a story with music and live interactive images. Below an example of what this collaboration with Sioen, Koen van den Broek and PJ Seaux resulted in. A challenging opportunity to create something unique on the verge of classical instruments & electronic music and classical painting & synthesising images.
triangleyur
Upon planning the release of Triangle Yur, Sondervan asked me if I could make a generative cover and label for it that was plottable using oldschool pen plotters. I extended the challenge by making every plot unique. The result of this labour-intensive project was several families of record covers, clearly from a common ancestor. That ancestor was a piece of music found on the record, the base DNA from which I extracted more data, visualised as linear waves, wel suited to the medium of plotters.




lambdasonic 2014
trix algorave
Making the Roland DXY-1200 pen plotter wireless (bluetooth) for about 10€
Easy and cheap hack
My office is quite cluttered with hardware. I’ve been toying with chiplotle lately but doing so meant cleaning up my desk and make room for the big clunky 80ties plotter. Chiplotle just sends serial commands, so why not over bluetooth. I ordered a
HC06 serial bluetooth module widely available
and a
serial to ttl converter powered by USB
just hooked it up together with a DB9-DB25 convertor and it just worked… pairing the HC06 was with the code 1234, instead of OSXs default 0000. besides that, no problems.
I set my
~/.chiplotle/config.py
to
serial_port_to_plotter_map = {‘/dev/tty.HC-06-DevB’ : ‘DXY-1300’}
The whole setup is usb powered and works really smooth. I can now leave the plotter at a convenient place in my office and play with it… wirelessly yay!
flashing the mi mini wifi router with OpenWRT
I lost connection with the mi mini wifi router after following this procedure. I flashed u-boot to the bootloader, and it succeeded, but It would no longer boot the firmware.
Apparently it did boot into u-boot, but to find that out I had to get a serial console. Instead of getting a usb serial to TTL I tried using a raspberry pi and the GPIOpins. It worked.
opening the MI mini wifi
two screws hold i together, opening it from there was a bit harder. You have to forcefully get underneathe four little hooks at the bottom front of the device

after opening it, all we need is accessible.
soldering a serial port on it
I used an old connector I had lying around, easy t get to the breadboard

next step involves the RPi
you can then hook it up to the RPis Tx, Rx and GND pins. As both devices use 3v3 TTL, no extra circuitry is needed
ssh over to the RPi
once your logged in, type
$ minicom -b 115200 -o -D /dev/ttyAMA0
to start a serial console on the RPis GPIOports. Once it runs, boot the mi and you should see this
now the easy part
connect a UTP cable from a LAN port directly to your computer, and assign your PC a manual address in th 192.168.1.x but not 192.168.1.1
start the http server on the mi
MT7620 # httpd
raspi_read: from:40028 len:6
NetTxPacket = 0x83FB5080KSEG1ADDR(NetTxPacket) = 0xA3FB5080
Trying Eth0 (10/100-M)Waitting for RX_DMA_BUSY status Start… done
ETH_STATE_ACTIVE!!
HTTP server is starting at IP : 192.168.1.1
HTTP server is ready!Keep going WEB failsafe, rx_counter=0 , GoGoGo!!!
point you browser to 192.168.1.1
and upload your firmware…
I flashed openwrt-ramips-mt7620-xiaomi-miwifi-mini-squashfs-sysupgrade.bin
connect to internet (cable)
and start setting up OpenWRT
$ opkg update && opkg list luci-*
$ opkg install luci-ssl$ /etc/init.d/uhttpd start
$ /etc/init.d/uhttpd enable$ uci set wireless.@wifi-device[0].disabled=0; uci commit wireless; wifi
make sure it boots from the flash partition
by default it waits for a tftp image to be transferred, so:
$ printenv
and take a look at the env variables
$ bootcmd=tftp
this should be
“bootcmd=bootm bc050000”
so set it and save it
$ setenv bootcmd bootm bc050000
$ saveenv
now reboot, test and go and configure it
OHM2013 moldover show
I was at OHM2013 for some hacking, meeting friends and meeting new people. One of them was @moldover and he brought his gear (mojo & robocaster)! As I’m building my own controller (for visuals and vegetables) I started talking to him. He was going to perform later that day at Rainbow Island. So I offered him a live VJset and after little to none preparation time I was able to fix my setup enough to get going. And so we did. And because it was fun, we did it again the next day. Inspired by the great place Rainbow Island is I gatherered some (retro) pixels during the day from dancing my little ponys to the masks from hotline miami. The people for rainbow Island added more beamers and splitters and lights and fire and the results was fun.
some pics
extracting earth earth’s entropy for generating aliens
I need to fill a lineair space and generate a continuously evolving series of abstract drawings. All this to fill up some leftover space at the office (to make it less boring). In particular a 30 cm (1ft) high space below the windows. This stretches along the windows and is quite long.
To avoid repetetivity, I chose to seed the algorithm with somewhat random data in the form of a series of pixels extracted along the image of the earth.
I work at a hi-tech internet innovation research institute but are in no way affiliated to Silicon Valley, we came up with the idea of connecting Ghent with a line to silicon valley, the result, is not that interesting to show, but it is a line, one pixel wide. It is however an interesting series of pixels, where neighbouring pixels are related.
but what to to with pixels.
It’s not an awful lot of data. A color, an RGB value(3 times 8 bits), a sequence number perhaps, maybe the relation to the neighbor? Does it within a certain threshold have the same amount of blue, green and red? Or does it represent a bump? As it comes from a terrain map, maybe it can represent an altitude. not sure yet.
But what I was looking for was more something that contains enough data to allow to generate specific images
You’re looking at it, just above this sentence. after parsing the pixel color data from it, half an alien is generated according to this procedure.
which is then mirrored and completed. Repeat this for every pixel and you get a lot of different aliens, first 25 of the above line, pictured below
[processing code]
/**
* aliens
*/PImage lijn;
int px = 0;
int pxmax = 5;
int offsetY = 0;
int alienSize = 160;void setup() {
frameRate(4);
size(pxmax*alienSize, pxmax*alienSize);
smooth();
background(0);
noStroke();
lijn = loadImage(“lijn.png”);}
void alien(color code, int px){
//println(red(code));
//int Rr = Integer
int offsetX = px – (pxmax*offsetY) ;fill(red(lijn.pixels[px]),green(lijn.pixels[px]),blue(lijn.pixels[px]));
rect((offsetX*alienSize),(offsetY*alienSize),alienSize, alienSize);
fill(0);String alienR = Integer.toBinaryString(parseInt(red(code)));
alienR = “0000000” + alienR;
alienR = alienR.substring(alienR.length()-8);
String alienG = Integer.toBinaryString(parseInt(green(code)));
alienG = “0000000” + alienG;
alienG = alienG.substring(alienG.length()-8);
String alienB = Integer.toBinaryString(parseInt(blue(code)));
alienB = “0000000” + alienB;
alienB = alienB.substring(alienB.length()-8);
//
//println(alienR);
for(int i=0;i<8;i++){
//println(alienR.charAt(i));
}for (int col = 0 ; col < 4; col++) {
for (int row = 0; row < 8; row++){
if(col == 1) {
String[] alienRArray = alienR.split(“”);
if(parseInt(alienRArray[row+1]) == 1) {
rect((col*20)+offsetX*alienSize, (row*20)+offsetY*alienSize, 20, 20);
rect(((7-col)*20)+offsetX*alienSize, (row*20)+offsetY*alienSize,20,20);
}
}
if(col == 2) {
String[] alienGArray = alienG.split(“”);
if(parseInt(alienGArray[row+1]) == 1) {
rect((col*20)+offsetX*alienSize, (row*20)+offsetY*alienSize, 20, 20);
rect(((7-col)*20)+offsetX*alienSize, (row*20)+offsetY*alienSize,20,20);
}
}
if(col == 3) {
String[] alienBArray = alienB.split(“”);
if(parseInt(alienBArray[row+1]) == 1) {
rect((col*20)+offsetX*alienSize, (row*20)+offsetY*alienSize, 20, 20);
rect(((7-col)*20)+offsetX*alienSize, (row*20)+offsetY*alienSize,20,20);
}
}
}
}
if(offsetX == 4){
offsetY++;
}
}
void draw(){
lijn.loadPixels();
color code = color(red(lijn.pixels[px]),green(lijn.pixels[px]),blue(lijn.pixels[px])) ;
alien(code, px);
px++;
}
[/processing code]
foggy fall 2011
All made while biking to work and listening to this on soundcloud, perfect soundtrack for a foggy morning
Out Of Doors (full version) by Flim