While I suppose this does allow for all of those things, as much as any programming language with access to an audio API does, this would be better described as a web-based DSP livecoding environment.
Apart from the naming quibbles, it looks excellent! I wonder what's generating the sound? I'm aware of the oscillator/filter primitives in the HTML5 audio API from the minimoog google doodle, but this seems more elaborate than that.
EDIT: for fun times, load "need more 303," scroll down to the bottom, and change some of the numbers around. Setting the slide() call to 1/1024 yields a nice FM-ish sound. You can even overdrive the filter. Reach for the lasers!
That said, it's a really clever idea to have all the source editable, since js is an interpreted language anyway. One can imagine a future where the community not only shares songs and sounds, but the DSP units themselves. Unlike desktop DAWs, which rely on dylibs (dlls) to supply external synths and effects, a js-based DAW can load, re-compile and hotswap units on the fly.
I'm glad you like it. The sound is generated purely by a JavaScript function returning sample values that are then handled by the Web Audio API and buffered. That's how you hear sound.
On edit: It's really easy to remix tracks that way, even small changes to values yield quite different results. It's fun!
I'll certainly contribute to this. Will the source be opened up?
Here's a delay filter:
var delay_array = [];
var delay_length = 5;
var delay_feedback = 0.6;
var delay_volume = 0.4;
function delay(x) {
y = 0;
if (delay_array.length < (delay_length * 1000)) {
delay_array.push(x);
} else {
y = delay_array.shift();
delay_array.push(x + (y*delay_feedback));
}
return (x) + ( y * delay_volume );
}
Include this in the DSP return code, ie; return delay(synth);An oscillator and a filter modulator are pretty much all you need to create this particular app. There's no reverb, and any delay effects are being "hard-coded" with simple degrading velocities. All synthesizers are built from these ultra-simple components, maybe 2 or 3 more and you have everything you need to build a digital synth purely with web technologies.
I would call it the audio equivalent of OpenSCAD.
I look forward to showing this to students in the fall.
Vice did an article on the subject a few months back which gives an overview of the scene (from a layman's view) http://www.vice.com/en_uk/read/algorave-is-the-future-of-dan...
- wikipedia
Check out http://algorave.com for more info on the live coding music scene, which has really taken off in the last year.
I can't wait for someone to combine live coding with Swift Playground/Bret Victor 'revealing the system' style interfaces.
You've really got a great product here.
At Bandhub ( http://bandhub.us ) we are looking for ways to integrate programmed music into our web DAW.
If you guys are up for a collaboration or want to discuss ideas, ping me osi (at) getbandhub (dot) com
The 303 example in the environments in which I learned computer music fundamentals (PD, Max, CSound, Supercollider) would require either much more or less understanding and/or 3rd party implementations of components to generate something similar. Most importantly the sound is really nice.
Btw the categorisation of it being a DAW is dependent on the user perspective, I've created what I would consider to be DAW equivalents in Max/Pure Data, that facilitate audio/midi recording and playback; just because a toolkit doesn't do stuff for you automatically doesn't mean it isn't capable. DAW in my opinion is just a marketing term not a descriptive one.
They also have a funding campaign (accepting paypal) to finish this project that will include modules like Oscillators, Sequencers and:
Effects: Amp, Chorus, Delay, Dynamics, Eq, Filter, Flanger, Modulation, Phaser, Reverb.
Synths: Ambient, Analog, Bass, Drums, Flute, FM, FX, Modular, Organ, Pads, Percussion, Piano, Samples and Strings.
Extended the melody & progression a bit. I'm so proud, this is awesome!
Also
yntaxError: Unexpected token * at Function (native) at t (blob:http%3A//wavepot.com/576aa761-8f7c-4918-b4e7-8bdd7c77ff39:2:16401) at Function.<anonymous> (blob:http%3A//wavepot.com/576aa761-8f7c-4918-b4e7-8bdd7c77ff39:2:16779) at Function.i.emit (blob:http%3A//wavepot.com/576aa761-8f7c-4918-b4e7-8bdd7c77ff39:1:2656) at DedicatedWorkerGlobalScope.i.isMaster.self.onmessage (blob:http%3A//wavepot.com/576aa761-8f7c-4918-b4e7-8bdd7c77ff39:2:12723)
https://gist.github.com/druu/044b8103e2a4842828bd
It's the melody of the song 'Popcorn'. While this might not be special, I implemented a first draft of a (going-to-be) multi-track sequencer. </shameless self plug>
Whatcha think?
If only I could export the generated sound!
I fiddled for a couple of minutes without any changes before realizing i had forgotten to initialize a variable. (the x checkmarks don't seem to work for unassignad variables..)
I assume it's mostly the (basic?) physics of sound waves that I'd need to understand?
If so, where can I find the repo?
If you could use any help coding, please let me know.
[edit: using something like coinbase would solve this, but how could you work it out without a 3rd party and any fees?]
I am floored by how well it runs on my Moto G, specially the 303 and the subwah patches.
Great job!