I Dropped My Phone The Screen Cracked
I Dropped My Phone The Screen Cracked is a web audio library that uses method chaining and CSS-style selectors to simplify creating, configuring and connecting audio nodes in the browser. Here's hello world:
//create and connect sine and system out. start the sine
__().sine().dac().play();
and a slightly more complex example:
//create and connect a sine oscillator (frequency of 180), lowpass,
//compressor and system output (level of .5).
__().sine(180).lowpass({frequency:160,q:5,id:"lp1"}).compressor().dac(.5);
//select the sine using its type and change the detune to 10
__("sine").detune(10);
//use the id to get a reference to the lowpass
//filter and set the frequency to 600
__("#lp1").frequency(600);
//create and connect a sawtooth oscillator, waveshaper & compressor
//and connect the compressor to the existing dac we created above.
__().saw(800).waveshaper().compressor().connect("dac");
//change the ratio of both compressors to 12
__("compressor").attr("ratio",12);
//start the sine and the sawtooth
__("sine,saw").start();
Audio node chains can be encapsulated as units using macros
//define a simple macro named "microsynth"
__().begin("microsynth").sine().gain().end("microsynth").dac();
//change the frequency of the sine
__("microsynth").frequency(100);
//start it up
__("microsynth").start();
and macros can be wrapped in simple factory functions to create plugins, making it possible to instantiate instances, connect them to other nodes, address them individually or as a group, nest them within other macros, etc.
//define a plugin called microsynth
cracked.microsynth = function(params) {
//pass any params to begin() so they can associated with the instance
__().begin("microsynth",params).sine().gain(0).end("microsynth");
//return cracked so we can chain methods
return cracked;
}
//create two instances with different ids
__().microsynth({id:"micro1"}).lowpass().dac();
__().microsynth({id:"micro2"}).lowpass().connect("dac");
//change the frequency in the first
__("#micro1").frequency(1200);
//change the frequency in the second
__("#micro2").frequency(600);
//set the gain in both and start them
__("microsynth").volume(1).start();
Generally, the goal of I Dropped My Phone The Screen Cracked is simplicity, brevity without obscurity and making audio coding as intuitive as patching a modular, so that noise makers can focus on keeping it weird and fun.
If you're interested in knowing more, there's a one page overview, full source documentation, a Reddit interview, some press, and a useful app for Mac or Linux to try it all out.
Also cat pictures.
If you'd like to contribute, you can send a comment to info@fastinversesquare.com, open an issue for bugs or feature enhancements or best of all, submit a pull request.