/** *
Today's isn't a single sound as much as a whole super-reverb-y sound world.
*I think you can sit around and play with this one for a while…
*/ import net.beadsproject.beads.core.*; import net.beadsproject.beads.ugens.*; import net.beadsproject.beads.data.*; import net.beadsproject.beads.events.*; AudioContext ac; Reverb rev1, rev2, rev3; Gain mg; WaveShaper ws; float[] pent = {0, 1.98, 3.95, 7.02, 8.99}; void setup() { size(400, 400); ac = new AudioContext(); mg = new Gain(ac, 1, .2); ws = new WaveShaper(ac); mg.addInput(ws); rev1 = new Reverb(ac); rev1.addInput(mg); rev2 = new Reverb(ac); rev2.addInput(rev1); rev3 = new Reverb(ac); rev3.addInput(rev2); rev3.setSize(1); rev2.setSize(.98); rev1.setSize(1); rev1.setLateReverbLevel(4); rev3.setLateReverbLevel(4); ac.out.addInput(mg); ac.out.addInput(rev3); ac.out.addInput(rev2); ac.out.addInput(rev1); ac.start(); } void draw() { background(0); } void keyTyped() { if(key == ' ') { Envelope env = new Envelope(ac, 0); env.addSegment(2, 2); env.addSegment(-.8, 4); env.addSegment(.2, 6); env.addSegment(0, 10); env.addSegment(0, 10, new KillTrigger(env)); mg.addInput(env); } else if(key >= '1' && key <= '9') { Noise n = new Noise(ac); Envelope env = new Envelope(ac, 0); Gain g = new Gain(ac, 1, env); BiquadFilter bf = new BiquadFilter(ac, 1, BiquadFilter.BP_PEAK); float freq = pow(2, (float)key - 49) * 50; bf.setQ(.9).setFrequency(freq); //println(freq); bf.addInput(n); g.addInput(bf); env.addSegment(2, 50); env.addSegment(1, 50); env.addSegment(0, 200); env.addSegment(0, 10, new KillTrigger(g)); mg.addInput(g); } else { Envelope env = new Envelope(ac, 0); int newkey = key % 40; float freq = 55 * pow(2, newkey / pent.length + pent[newkey % pent.length] / 12 + (float)(key % 17) / 500); //println(freq + " " + key / pent.length + " " + 1*key); //println(newkey % pent.length + " " + pent[newkey % pent.length]); float sawlev = abs(sin(((float)mouseX/width) * 7 + cos((float)mouseY / height * 3))); //float squarelev = (sawlev * .5 + cos(((float)mouseY/height) * 15)) * -1.2; float sinlev = 1.5 - sawlev; WavePlayer saw = new WavePlayer(ac, freq, Buffer.SAW); Gain sawg = new Gain(ac, 1, sawlev * .5); sawg.addInput(saw); //WavePlayer square = new WavePlayer(ac, freq, Buffer.SQUARE); //Gain squareg = new Gain(ac, 1, squarelev * .5); //squareg.addInput(square); WavePlayer sine = new WavePlayer(ac, freq, Buffer.SINE); Gain sineg = new Gain(ac, 1, sinlev * .5); sineg.addInput(sine); Gain g = new Gain(ac, 1, env); g.addInput(sawg); //g.addInput(squareg); g.addInput(sineg); ws.addInput(g); env.addSegment(.4, 10); env.addSegment(.18, 40); env.addSegment(0, 100); env.addSegment(0, 100, new KillTrigger(g)); } } void keyPressed() { // trap escape if(key == ESC) { key = 0; } }