/** *

Clickers

*

by Benito

*

Press different keys to hear different bursts of clicks.

*

Click on the window to change the reverb settings: X-axis controls "room size", Y-axis controls damping.

*/ import net.beadsproject.beads.core.*; import net.beadsproject.beads.ugens.*; import net.beadsproject.beads.data.*; import net.beadsproject.beads.events.*; AudioContext ac; Reverb rev; void setup() { size(400, 400); ac = new AudioContext(); rev = new Reverb(ac); ac.out.addInput(rev); ac.start(); } void draw() { background(0); } void keyPressed() { float lev = .5 * ((key % 2) * 2 - 1); long base = ((long)key * key * key * key * key) % 241; float pan = (float)base / 241 * 2 - 1; base = (base * base * base * base * key) % 241; float clicklen = (float)base / 200f + .005; int fastlen = (key % 17) + 5; float fastspeed = (key % 23) * 2 + 30; int slowlen = (key % 11) * 2 + 7; float slowspeed = (key % 13) * 3 + 20 + fastspeed; Envelope env = new Envelope(ac, 0); Panner panner = new Panner(ac, pan); panner.addInput(env); for(int i = 0; i < fastlen; i++) { float frac = (float)i / fastlen; env.addSegment(lev * (.5 + frac * frac), clicklen); env.addSegment(0, clicklen); env.addSegment(0, fastspeed); } for(int i = 0; i < slowlen; i++) { float frac = 1 - (float)i / slowlen; env.addSegment(lev * frac, clicklen); env.addSegment(0, clicklen); env.addSegment(0, slowspeed + i * ((float)i / 5 + 1)); } env.addSegment(0, 1, new KillTrigger(panner)); ac.out.addInput(panner); rev.addInput(panner); } void mouseClicked() { rev.setSize((float)mouseX / width); rev.setDamping((float)mouseY / height); }