Delay

A delay device: a time or a note value, a feedback, a tone and a mix, a panel that draws the echoes with a handle, a Web Audio engine and tools for agents.

Audio UI

Repeats the sound. The echoes fade by the feedback, each darker than the one before. It is a device: a state, a panel, an engine and tools, each its own file.

Installation

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

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

Controls

Controls · 7

Panel

The panel draws the echoes the state makes, one line each, fainter as they fade. delayTaps(state, windowMs) returns them. With Sync on, the handle lands on the nearest note value and the Time control is drawn off. With Sync off, the note list is.

import { DelayPanel } from "@/components/audio-ui/devices/delay/panel";
import { delayDevice } from "@/components/audio-ui/devices/delay/device";

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

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

Engine

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

The repeats go round a low-pass filter, so each is darker than the one before. A change of time glides slowly, so the echo bends like a tape instead of clicking, and the feedback stops short of 95 % so it cannot run away. A note longer than the delay can hold (two seconds) is held to that. The 1/8d the block starts on is a dotted eighth at the loop's 100 BPM, 450 ms.

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