Category Archives: blog

Embedding WAMs

WAMs have two incarnations. A headless WebAssembly synth is distributed as a loader script file (e.g., obxd.js), and it implements the synth engine as an AudioWorkletNode – AudioWorkletProcessor pair. The second incarnation adds frontpanel GUI, reusing the headless synth engine implementation. GUI version is distributed as a Web Component (e.g., obxd.html), and loaded using HTML import. I wrote recently also a <wam-host> container to simplify WAM embedding. <wam-host> A) handles synth loading and instantiation, B) provides common patch and midi port management, and C) exposes…

Read More »

AudioWorklet polyfill

OBXD and DEXED demos run now in stable Chrome, Firefox and Safari. Edge testing is still pending, can someone try it please? AudioWorklet polyfill source code is available at github. It is loosely based on Houdini’s AnimationWorklet polyfill, repurposed for running AudioWorkletProcessor (and AudioWorkerGlobalScope) in a Web Worker, and AudioWorkerNode in main thread. Audio output is through main thread ScriptProcessorNode (SPN). Worker and SPN are interconnected via SharedArrayBuffer. SharedArrayBuffer is very cool. Chrome stable seem to work with 256 sample buffer size without audio glitches…

Read More »

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…

Read More »


The webDEXED port was pretty easy. After some minor modifications in the DEXED codebase I just linked it against the JUCE WebAssembly library (which was created when porting webOBXD). The GUI port was grabbed from my earlier PNaCl implementation. This WAM uses AudioWorklet’s MessagePort that landed in Chrome Canary 64.0.3275.0. If you want to try the demo, please make sure you are running the latest version of canary! DEXED is a DX7 emulation, originally created by Digital Suburban (github). DEXED has two DX engines under the hood. The…

Read More »