Skip to content
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
data
dist
docs
examples
jsdoc
plugins
src
.gitignore
Gruntfile.js
LICENSE
OVERVIEW.md
README.md
package.json

README.md

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.

You can’t perform that action at this time.