VAMP plugins as WAMs

About a year ago I explored how to get VAMP plugins online. As a proof of concept I ported Dan Stowell’s amplitude follower VAMP plugin as a WAM.


A demo is available at http://webaudiomodules.org/demos/vamp/vamphost.html

This WAM is implemented as a PNaCl module, so it requires Chrome (canary is not necessary). After porting and thinking a bit further, I concluded that desktop browser is actually an excellent platform for hosting VAMPs. Here’s a quick and incomplete list of the benefits.

  • plugin implementation : realtime/offline audio graphs and animated hires graphics are integrated
  • plugin distribution : centralized repository to share the tools, installation not required
  • analysis sessions : drag’n’drop local files, script custom audio graphs, store results in cloud/locally
  • dissemination : share research results, teaching
  • adaptive fx : realtime analysis output may be routed to control parameters of another node

An extended WAM API may help in bringing the VAMP format to the browser:
The WAM WebAssembly wrapper enables reuse of existing VAMP C++ codebases. AudioWorklet’s MessagePort can pass any data format from the C++ part — running in audio thread AudioWorkletProcessor — to the AudioWorkletNode (AWN) running in main thread. A custom AWN subclass can then pass the data for further processing or scripting, and expose its format using WAM JSON descriptors.

The amplitude follower WAM is of course insufficient to test the feasibility of the above approach. I suppose one way forward would be to port an existing VAMP plugin set (e.g., the QM VAMPs) as WAMs, to get a better understanding how the base WAM API needs to be extended. Preferably in a modular manner so that the base API does not explode with domain specific requirements.

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="">