/**
*
Bloopy World
*by Benito
*Bloops. Ring modulated. With reverb coming in and out.
*- Moving the mouse (no buttons pressed):
*
- X-axis: bloop base frequency.
*- Y-axis: ring modulation in/out speed.
*- Clicking / moving the mouse (buttons pressed):
*
- X-axis: reverb in/out speed.
*- Y-axis: bloop speed.
*/
import net.beadsproject.beads.core.*;
import net.beadsproject.beads.data.*;
import net.beadsproject.beads.events.*;
import net.beadsproject.beads.ugens.*;
AudioContext ac;
Reverb verb;
Envelope disspeed, verbspeed, bloopspeed, blooppitch;
void setup() {
size(400, 400);
ac = new AudioContext();
bloopspeed = new Envelope(ac, -4);
WavePlayer saw = new WavePlayer(ac, bloopspeed, Buffer.SAW);
Function bits = new Function(saw) {
public float calculate() {
if(x[0] < 0) return 0;
return x[0] * x[0];
}
};
blooppitch = new Envelope(ac, 220);
WavePlayer sine = new WavePlayer(ac, blooppitch, Buffer.SINE);
disspeed = new Envelope(ac, .643);
WavePlayer disruptor = new WavePlayer(ac, disspeed, Buffer.SINE);
Function freq = new Function(disruptor) {
public float calculate() {
return 57.8 + (x[0] + 1) * 100;
}
};
WavePlayer sine2 = new WavePlayer(ac, freq, Buffer.SINE);
Gain mult = new Gain(ac, 1, sine);
mult.addInput(sine2);
Gain g = new Gain(ac, 1, bits);
g.addInput(mult);
verb = new Reverb(ac);
verb.addInput(g);
verbspeed = new Envelope(ac, .25);
WavePlayer verbsin = new WavePlayer(ac, verbspeed, Buffer.SINE);
Function verblevel = new Function(verbsin) {
public float calculate() {
return (x[0] + 1) * 3;
}
};
Gain verbg = new Gain(ac, 1, verblevel);
verbg.addInput(verb);
WaveShaper ws = new WaveShaper(ac);
ws.addInput(g);
ws.addInput(verbg);
Gain mg = new Gain(ac, 1, .4);
mg.addInput(ws);
ac.out.addInput(mg);
ac.start();
}
void draw() {
background(0);
}
void mouseMoved() {
blooppitch.clear();
blooppitch.addSegment(pow(2, (float)mouseX / width * 6) * 55, 200);
disspeed.clear();
disspeed.addSegment((float)mouseY / height * 3, 100);
}
void mouseClicked() {
mouseDown();
}
void mouseDragged() {
mouseDown();
}
void mouseDown() {
verbspeed.clear();
verbspeed.addSegment((float)mouseX / width * 2, 500);
bloopspeed.clear();
bloopspeed.addSegment(((float)mouseY / height - .5) * 20, 200);
}