/** *

BirdBass Cave

*

by Benito

*

Granularly deployed chirps with ominous bassiness.

* */ import net.beadsproject.beads.core.*; import net.beadsproject.beads.data.*; import net.beadsproject.beads.events.*; import net.beadsproject.beads.ugens.*; AudioContext ac; Compressor comp; Envelope amount; RandomPWM basspwm; Envelope bassfreq, basslev; float[] scale = {1, 9f/8, 6f/5, 5f/4, 45f/32, 3f/2, 5f/3, 7f/4}; void setup() { size(400, 400); ac = new AudioContext(); Clock clock = new Clock(ac, 20); clock.setTicksPerBeat(1); ac.out.addDependent(clock); amount = new Envelope(ac, 0); ac.out.addDependent(amount); basslev = new Envelope(ac, 0); bassfreq = new Envelope(ac, 110 / 3); WavePlayer basssin = new WavePlayer(ac, bassfreq, Buffer.SINE); basspwm = new RandomPWM(ac, RandomPWM.RAMPED_NOISE, 5000, 20000, 1); Gain bassy = new Gain(ac, 1, basspwm); bassy.addInput(basssin); Gain bg = new Gain(ac, 1, basslev); bg.addInput(bassy); comp = new Compressor(ac); comp.setRatio(4); comp.addInput(bg); Bead blooper = new Bead() { public void messageReceived(Bead mess) { float spread = ((float)mouseX / width) * 10; int base = (int)((float)mouseY / height * 30) + 15; int num = (int)(random(0, amount.getValue()) + .4); for(int i = 0; i < num; i++) { Envelope env = new Envelope(ac, 0); int note = base + (int)random(-spread, spread); float freqf = 53.5 * pow(2, note / scale.length) * scale[note % scale.length] + 1.5; Envelope freq2 = new Envelope(ac, freqf * 1.9); freq2.addSegment(freqf * 1.9, i * 15.2); freq2.addSegment(freqf, 60); WavePlayer sine2 = new WavePlayer(ac, freq2, Buffer.SINE); WavePlayer sine1 = new WavePlayer(ac, freqf, Buffer.SINE); Gain mult = new Gain(ac, 1, sine2); mult.addInput(sine1); Gain g = new Gain(ac, 1, env); g.addInput(mult); comp.addInput(g); float sign = (note % 2) - .5; freq2.addSegment(0, i * 15.2); env.addSegment(sign, 20); env.addSegment(sign * .4, 30); env.addSegment(0, 150); env.addSegment(0, 50, new KillTrigger(g)); } } }; clock.addMessageListener(blooper); Reverb verb = new Reverb(ac); verb.addInput(comp); Gain mg = new Gain(ac, 1, .4); mg.addInput(comp); mg.addInput(verb); ac.out.addInput(mg); ac.start(); } void draw() { background(0); } void keyPressed() { amount.clear(); float newval = amount.getValue(); newval += 1.5 / (.5 + newval); amount.addSegment(newval, 300); amount.addSegment(0, 1500); bassfreq.clear(); int bassnote = (key % (scale.length * 3)); float newbassfreq = 110f / 3 * scale[bassnote % scale.length] * pow(2, bassnote / scale.length); println(bassnote + " " + newbassfreq + " " + scale[bassnote % scale.length]); bassfreq.addSegment(newbassfreq, 350); basslev.clear(); basslev.addSegment(2, 1500); basslev.addSegment(0, 5500); if(key == 27) key = 0; }