/** *

Warbles

*

by Benito

*

Press keys to hear warbling.

*

Move the mouse to control the warble quality.

*/ import net.beadsproject.beads.core.*; import net.beadsproject.beads.ugens.*; import net.beadsproject.beads.data.*; import net.beadsproject.beads.events.*; AudioContext ac; RandomPWM pwm; Envelope base, spread; void setup() { size(400, 400); ac = new AudioContext(); base = new Envelope(ac, 50); spread = new Envelope(ac, 100); ac.out.addDependent(base); ac.out.addDependent(spread); ac.start(); } void draw() { background(0); } void keyPressed() { warble(55 * (int)random(2, 20), 2000); } void mouseMoved() { base.clear(); base.setValue(50 + mouseX); spread.clear(); spread.setValue(50 + mouseY * 3); } void warble(float freq, float decay) { float baseval = base.getValue(); println(baseval); RandomPWM pwm = new RandomPWM(ac, RandomPWM.RAMPED_NOISE, baseval, baseval + spread.getValue(), 1); Function env = new Function(pwm) { public float calculate() { if(x[0] < 0) return 0; else return x[0]; } }; WavePlayer sine = new WavePlayer(ac, freq, Buffer.SINE); Gain g = new Gain(ac, 1, env); g.addInput(sine); Envelope env2 = new Envelope(ac, 0); Gain mg = new Gain(ac, 1, env2); mg.addInput(g); float lev = .2 + 55f / freq; env2.addSegment(lev, 10); if(decay > 0) { env2.addSegment(lev, decay); env2.addSegment(0, 2000, new KillTrigger(mg)); } ac.out.addInput(mg); }