Lab

Exciter

An exciter device: a frequency, a drive and an amount, a panel that draws the band it excites, a Web Audio engine and tools for agents.

Audio UI

Adds presence and air. It takes the highs above a frequency, saturates them into new harmonics above, and adds those to the sound: a voice or a mix comes forward and opens up without a boost that only makes it louder. It is a device: a state, a panel, an engine and tools, each its own file.

Installation

pnpm dlx shadcn@latest add @audio-ui/exciter

It installs the device's state, its engine and its panel to components/audio-ui/devices/exciter/. The demo above, which wires them to a loop, is @audio-ui/block-exciter.

Controls

Controls · 4

Panel

The panel draws the band of highs it makes its harmonics from. exciterBand(state) is what it draws.

import { ExciterPanel } from "@/components/audio-ui/devices/exciter/panel";
import { exciterDevice } from "@/components/audio-ui/devices/exciter/device";

const [state, setState] = useState(() => exciterDevice.defaults());

<ExciterPanel onValueChange={setState} value={state} />;

Engine

Create it, connect it and update it as for any device: see The engine.

The exciter runs on the audio thread: the exciter of @audio/effect-exciter in an AudioWorklet loaded from a blob (EXCITER_WORKLET is its source), 128 frames at a time: a high-pass, a state-variable filter with a Q of 2, then a soft saturation whose harmonics are added to the sound. A worklet cannot import, so the device carries the kernel as published (EXCITER_KERNELS, in its kernels.ts). Until it is ready, and in a context with no worklets, the sound passes clean: ready resolves once it is in the graph.

Built by Ouest Labs, the source code is available on GitHub.
RSS