Give your interface
a harmonious voice.

Nine sound families, ten interaction sounds, one consistent interface. Synthesized live with Web Audio. Pick a family and set it up yourself, or give your coding agent one prompt and let it do the rest.

Tune it here, then copy the exact play() call into your own code.

01 · Families

Nine voices, one instrument.

Each family is a complete sonic identity. Call setFamily() once to pick the one that matches your product, and every instance inherits its character.

02 · Instances

Dynamic Interactions

Advanced sound behaviors designed for real world application logic. Call play() or playContinuous() for anything more than a single attribute. Each card below is live, so go ahead and try it.

40%

playContinuous('slider')

Continuous feedback that quantizes pitch while you drag any range input.

Drag to hear it.

play('listening')

A stateful cue for voice sessions. It tells users the moment your agent starts and stops hearing them.

Tap to start, tap again to stop.

invoice_2026.pdf

play('delete')

Programmatic only, by design. It plays after your own confirmation step, never on a raw click.

Confirm to trigger the sound.

03 · Why chordal

Pick a family for consistency. Tune each call for control.

Lightweight, flexible, and zero friction. Hover any card to see it in action.

04 · Get started

Two lines from silent to alive.

1. Install

$ npm install chordal

2. Mark up and bind

index.html
<button data-sound-hover data-sound-click>Save</button>
app.ts
import { bind } from 'chordal';

bind();

Full API, every attribute, and the family/instance reference live in the docs.