A WAM Story

Web Audio Modules (WAM) – a new audio “plug-in” format for the web browser

Web Audio Modules (WAM) is an SDK/API that we started work on over two years ago which aims to eventually be the equivalent of VST for the web. We use the term “module” because these are not like traditional browser plug-ins, which must be installed – they load with the rest of the web page like any other resource, and integrate into the Web Audio API via the “AudioWorkletProcessor”. The DSP is in WebAssembly, which is a low-level assembly-like language already supported in most popular browsers. WAMs will most often be written firstly in C++ and cross-compiled to WebAssembly, but they can also be written in JavaScript.

It’s important to us that this is a community driven API in the first instance, in order to address some of the frustrations that plug-in developers have experienced in the past due to the DAW vendors controlling the formats. We have created a community website, to document our work. There you will find some playable WAM synthesiser demos. We have preliminary API documentation and code on github. We would love to get feedback from variety of developers in order to make this suitable for everyone’s needs.

We met at the first ever Web Audio Conference (WAC) at IRCAM in January 2015 and got on really well (thanks in part to a mutual love of 1980s synthesisers) and we decided to collaborate on formalising an API to make this approach easy for others to adopt in a standard way. We published a paper on this work at the sound and music computing conference (SMC) in July 2015. At this time, there were some major limitations with the technology that meant there was quite a lot of latency and potential for audio glitches. Over the last two years the W3C Web Audio working group has done some great work on addressing these limitations, and we have also seen the introduction of WebAssembly, a cross browser W3C format for executing bytecode in the browser. Recently we saw the first appearance of the “AudioWorklet” in Chrome Canary – the experimental version of Google Chrome. This is a game changer for web audio, because it enables custom cross compiled code to run with low latency in the audio thread = no glitches. Other browsers will follow soon.

The WAM API has been designed to be lightweight and simple and to work nicely with existing code bases, so that plug-ins written using popular cross platform frameworks such as JUCE and IPlug can also target the Web from the same code base. We tried to follow guidelines from the GMPI format discussions over 10 years ago.

There are many questions to be solved such as: how GUIs can be standardised, since there are so many options for implementing GUIs in the web browser (HTML elements, WebGL, SVG, Canvas).

We would like to invite everyone to help us work these issues out, and we are particularly interested in feedback from developers on our preliminary API work.

You can find demos and more information including our paper from the 2015 SMC conference here, and you can also comment on everything.

We have a mailing list for updates, and you can follow us on twitter @webaudiomodules too.

We are looking forward to the next generation of software instruments and effects!

PS. we will soon be running a competition to design a nice logo for WAMs – stay tuned.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">