Build logIssue 02

One sound engine, from browser to hardware

Faust gives us a fast route from an idea for a sound to a playable browser build—and from there to code that runs on the instrument itself.

C++ source code for the Viberoo Seeq Chaos sound engine
The hardware-side Chaos engine in C++, showing initialization and MIDI note handling in the embedded audio code.

Developing a hardware instrument usually creates a slow feedback loop: change the code, build it for the device, transfer it, then test it through the physical controls. We wanted to spend more of that time listening and less of it waiting.

Writing the sound once

We use Faust to describe the signal processing behind our synth engines. Faust is a language made specifically for audio DSP: oscillators, filters, envelopes, modulation, and the way those pieces are connected can all be expressed in a compact, readable source file.

That source is not tied to a single platform. For the web prototype, it is compiled to WebAssembly and runs inside the browser's audio system. For the hardware, the same Volt source generates C++ suited to the embedded audio engine.

A shorter path from change to sound

The browser build makes iteration immediate. We can adjust an oscillator, change the response of a filter, or rebalance a modulation range and then play the result through the actual sequencer workflow. Because the sequencer, parameter pages, and presets are already there, a sound is tested in musical context rather than as an isolated DSP experiment.

This also exposes interaction problems early. A parameter may work technically but cover too wide a range for one encoder, or a patch may need a different default to sit well alongside other sounds and patterns. Those decisions can be refined before we move back to the hardware bench.

Shared where it matters

The browser and firmware are not identical applications. They have different display, control, and audio-runtime requirements. What Faust lets us share is the part that defines the sound itself, along with the parameter model that connects it to the interface.

For Volt, the embedded build is generated from the same DSP source used by the browser version. That reduces the risk of the prototype sounding one way online and another way on the finished instrument, while still allowing the firmware to be optimized for the hardware around it.

Other engines can take a more platform-specific route. The Chaos code shown above is a compact native C++ port of the Faust design, adapted to the constraints of the embedded runtime while preserving the behavior we developed in the browser.

The browser is part of the workshop

The playable web version is more than a preview of Viberoo Seeq. It is one of the tools we use to build it. It lets us test synthesis and workflow quickly, then carry the proven parts toward the physical instrument instead of starting over when development moves to hardware.