boris.kopeinig.net | club.ware - infrasemantic sensory modulation, tmp sys, blink or VSP, visual (self)stimulation pattern, sub stim
soundresponsive, 2003, visual system based on realtime FFT audio analysis, frequency bands are selected by random values, so it never worked like a car radio equalizer display.



another soundresponsive structure (source code, built with processing)

import processing.opengl.*;
import pitaru.sonia_v2_9.*;
int index=0;
float ypos;
int menge=20;

void setup() {
     size(800, 600, OPENGL);
     frameRate(60);
     Sonia.start(this);
     LiveInput.start(16);
     noStroke();
}

void draw() {
     background(255,0,255);
     LiveInput.getSpectrum();
     if(index < LiveInput.spectrum.length-1 ){
          index++;
     } else {
          index=0;
     };
     for(int x = 1; x < menge; x++){
          ypos = (x * LiveInput.spectrum[index])% height;
          println(ypos);
          fill(0);
          rect(0, ypos, width, 20);
     }
     for(int x = 1; x < menge; x++){
          ypos = height - ((x * LiveInput.spectrum[index])% height);
          fill(0);
          rect(0, ypos, width, 20);
     }
}

void keyPressed() {
     if (keyCode == UP) {
          menge ++;
     } else if (keyCode == DOWN && menge > 0) {
          menge --;
     }
}

// version .1
import processing.opengl.*;
import pitaru.sonia_v2_9.*;
int index=0;
String s;
float ypos;
int menge=20;
PFont myFont;
void setup() {
     size(800, 600, OPENGL);
     frameRate(60);
     myFont = createFont("Helvetica LT 75 Bold", 20);
     textFont(myFont);
     textSize(20);
     Sonia.start(this);
     LiveInput.start(16);
     noStroke();
}

void draw() {
     background(255,0,255);
     LiveInput.getSpectrum();
     if(index < LiveInput.spectrum.length-1 ){
          index++;
     } else {
          index=0;
     };
     for(int x = 1; x < menge; x++){
          ypos = (x * LiveInput.spectrum[index])% height;
          fill(0);
          rect(0, ypos, width, 20);
          ypos = height - ((x * LiveInput.spectrum[index])% height);
          rect(0, ypos, width, 20);
     }
     s = menge + " " + ypos;
     text(s, 20, 20);
}

void keyPressed() {
     if (keyCode == UP) {
          menge ++;
     } else if (keyCode == DOWN && menge > 0) {
          menge --;
     }
}

// version .2
import processing.opengl.*;
import pitaru.sonia_v2_9.*;
int index=0;
String s;
float ypos;
float m;
int menge=20;
PFont myFont;
void setup() {
     size(800, 600, OPENGL);
     frameRate(60);
     myFont = createFont("Helvetica LT 75 Bold", 20);
     textFont(myFont);
     textSize(20);
     Sonia.start(this);
     LiveInput.start(64);
     noStroke();
}

void draw() {
     background(255,0,255);
     LiveInput.getSpectrum();
     if(index < LiveInput.spectrum.length-1 ){
          index++;
     } else {
          index=0;
     };
     m = LiveInput.spectrum[index]%menge;
     for(int x = 1; x < m; x++){
          ypos = (x * LiveInput.spectrum[index])% height;
          fill(0);
          rect(0, ypos, width, 20);
          ypos = height - ((x * LiveInput.spectrum[index])% height);
          rect(0, ypos, width, 20);
     }
     fill(255);
     s = menge + " "+ m + " " + ypos;
     text(s, 7, 20);
}

void keyPressed() {
     if (keyCode == UP) {
          menge ++;
     } else if (keyCode == DOWN && menge > 0) {
          menge --;
     }
}