In the distant future humans have been forced to leave their home in the Milky Way Galaxy due to the inevitable Andromeda collision. They now travel through space within giant bio-mechanical space birds acting both as vessels and guides ushering the last of the human race around the stars in search of habitable planets. It has been a journey lasting generations, their numbers are strong, but with increasing unpredictable solar storms the quest is suddenly becoming a failing effort.
Music: So Close – Jordan F
Audio interactivity – created in processing.
Click through to see the code –
//Solar Winds Disturbing Migration
//by AJ LeVine 2014
//thanks to the coding help session with ryan and mike for teaching us how to make rain
//thanks to João Pedro Gonçalves for helping explain minim to me
//initial variable setup
//import Minim
import ddf.minim.analysis.*;
import ddf.minim.*;
Minim minim;
AudioPlayer player;
AudioInput in;
FFT fft;
//numbers of raindrops and birds on screen
int numRain=200;
int numBirds= 100;
//speed and rejuvination of raindrops
float x[] = new float[numRain];
float y[] = new float[numRain];
float speedY[] = new float [numRain];
//speed and rejuvination of birds
float xx[] = new float[numBirds];
float yy[] = new float[numBirds];
float speedXX[] = new float[numBirds];
float speedYY[] = new float [numBirds];
void setup () {
//size of screen
size (960, 700, P2D);
// audio setup
minim = new Minim(this); //Create minim
in = minim.getLineIn(Minim.STEREO, 512); //setting mic input
fft = new FFT(in.bufferSize(), in.sampleRate()); //config FFT
fft.linAverages(10); //divide frequencies into ranges
//musicplayer
player = minim.loadFile("exbirds.mp3", 2048);
player.play();
//setting up placement movement of initial raindrops
for ( int i=0; i < numRain; i++) {
x[i] = random(width);
y[i] = random(height);
speedY[i] = random( 5, 10 );
}
for ( int b=0; b < numBirds; b++) {
xx[b] = random(width);
yy[b] = random(height);
speedXX[b] = random( 1, 3);
}
noStroke();
}
void draw() {
//redraw background or maybe an image soon
background(10);
//setup audio
fft.forward(in.mix); //get mic audio
float fft1 = map(fft.getAvg(1), 0, 10, 1, 10); //setting the mic input to eventually control speed of birds
//place random raindrops on screen
for ( int i=0; i < numRain; i++) {
fill(random(60), random(60), random(120));
ellipse( x[i], y[i], random(5, 10), random(15, 40) );
//rays of light and bizarre solar wind giving our birds a difficult time during their migration
fill(random(255), random(255), random(255), random(60));
triangle(x[i], y[i], random(10, 20), random(10, 20), random(10, 20), random(10,20));
if (y[i] > height) {
y[i] = 10; //ensure that they start towards the top of the screen when regenerated
x[i] = random(width);
speedY[i] = random (5, 10);
} else { y[i]+=speedY[i];
}
}
//place random birds on screen
for ( int b=0; b< numBirds; b++) {
fill(random(255), random(255), random(255), random(255));
rotate(0.9); //rotation not only rotates shape, but movement as well, it did what I wanted but when I tried to unrotate the movement it made things even weirder
rect( xx[b], yy[b], random(10, 60), random(10, 60) );
if ( xx[b] > width || yy[b] > height) {
xx[b] = random(width);
yy[b] = random(height);
speedXX[b] = fft1; //random(1,5);
} else { xx[b]+=speedXX[b];
}
}
}
void stop()
{
player.close();
minim.stop();
super.stop();
}
No comments yet.