arduino livecoding

so here's some more in depth info on my performance at the live.code.festival / algorave in karlsruhe.

being fascinated since long by the sound of serial transmission, i got into trying to make music out of it in some way. by trial-and-error i figured out that if i connect a small speaker to the tx line of an arduino, i could upload programs that send serial data and listen to the sound of it.
it is all very basic: if i make the arduino program send data with delays in between, it play click rhythms. and programs with faster streams of data play tones. more elaborate combinations of delays and patterns of data produce chords, melodies and a variety of noises. so it works like some sort of one-bit music system that is nice and challenging to play with.

the programs i [live]code can look like this...

byte cnt= 0;
void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.write(cnt);
  delay(5);
  cnt++;
}

and the resulting sound is this... (raw and unfiltered)


and a more elaborate program...

byte cnt= 0;
void setup() {
  Serial.begin(9600);
}
void loop() {
  for(int i= 0; i<100; i++) {
    Serial.write(cnt++%5+10);
    delay(random(4));
  }
  for(int i= 0; i<200; i++) {
    Serial.write(cnt++%5+10);
    delay(2);
  }
  for(int i= 0; i<100; i++) {
    Serial.write(cnt++%5+10);
    delay(random(4));
  }
  for(int i= 0; i<100; i++) {
    Serial.write(cnt++%5+10);
    delay(3);
  }
  for(int i= 0; i<100; i++) {
    Serial.write(cnt++%5+10);
    delay(4);
  }
  if(random(2)==0) {
    Serial.begin(random(10000));
  }
}

sounds like this...

and of course the sound of the uploading (verification really) is great in it self. it typically sounds like this... (raw and unfiltered)

i think the uploading sound changes subtly depending on program length and i also guess it will change with different arduino bootloaders and whatever baudrate they are using.

and you also have a bit of control over the timbre of the sounds. certain 8bit numbers are more square-wave like than others e.g. 170 (0b10101010), and 85 (0b01010101) sound more 'clean' and 15 (0b00001111) and 240 (0b11110000) also have a more distinct pitch.
different baudrates have a huge effect on the sound - mainly working as frequency transposition.

but the real fun starts when one connects five arduinos to a mixer and start playing with volumes, panning and filters. by having five arduinos connected to an usb hub while running five copies of the arduino ide software, i can write little programs on the fly that will address the different boards and play different sounds on the tx lines. (listening to the rx line also works but then the upload process fails. it'll require extra circuitry to tap into this data without disrupting the uploading).

the reason i used five arduinos is because that's all i could connect to my laptop (2x usb) with my 4-port usb hub. that in combination with the limitation of computer screen space. it is hard to have more than five arduino ide programs open and visible at the same time.

anyway, as the voltage of the standard arduino is 5v and really a bit too much for audio equipment, i bring this down a bit with a simple voltage divider. i'm using a 10k and a 1k resistor.

here are some pictures of the setup. i'm using the arduino clone red board from sparkfun.

the complete setup (without mixer and laptop)...

one issue with the setup is that one can't trust the arduino ide to remember which serial port it was connected to. so every time i start the program i need to double check that the five arduino ide programs are set to the right arduino board. and as i like to know which board is connected to which mixer channel, i also need to check that and possibly reconnect the sound cables.

live at the live.code.festival in karlsruhe (algorave night 20apr, 2013). five arduino boards all with their serial port (tx line) connected to a mixer (with simple protective circuitry in between). so all sound are generated from what the arduino boards are programmed to transmit serially. note that the sound is heavily distorted. sorry.