WaveformSounds — a sound list for sample packs
There’s a new member of the family: @arraypress/waveform-sounds, first
released on 6 October 2026. It’s a list of sounds — the previews inside a sample pack, a preset
bank or a sound library — that people can search, filter and audition.
Why another list?
Section titled “Why another list?”WaveformPlaylist is made for listening: an album, a podcast, a few tracks with artwork and chapters. A sample pack is a different job. It can hold hundreds of short previews, and the person browsing it isn’t listening through — they’re hunting for the right kick, a bass loop at 128 BPM, something in F minor.
So WaveformSounds is built around finding and auditioning:
- Search, type chips, a key menu, a BPM range and a sort menu — each one appearing only when your data gives it something to filter.
- Auditioning from the keyboard: while a sound plays, ↓ plays the next one, the way a sample
browser does. ← / → seek,
/jumps to the search. - One audio engine for the whole list. Every sound plays through a single WaveformPlayer; the rows are just a button, some text and a small waveform drawn from low-resolution peaks when it scrolls into view. Hundreds of sounds is hundreds of rows, not hundreds of players.
- Filters in the address, so a filtered list can be shared; optional per-sound download links; listen analytics through WaveformTracker with no extra code.
- Server rendering. A DOM-free renderer writes the whole list as HTML, and the runtime adopts it instead of rebuilding it.
- Colour-agnostic, like the rest of the family: it takes its colours from the page, light or dark, until you give it a brand colour.
One manifest for the whole pack
Section titled “One manifest for the whole pack”The data is a single JSON file, and waveform-gen 2.1.0 writes it for you:
npx @arraypress/waveform-gen ./public/previews/ --recursive \ --manifest ./public/previews/sounds.json --base-url /previews/It reads each file’s BPM and key from its name (Bass_Loop_04_128_Fmin.wav), its type from its
folder, and stores 64 bars of peaks per sound as a short hex string. Where a name is ambiguous it
leaves the value out rather than guess. Then the list is one element:
<div data-waveform-sounds data-manifest="/previews/sounds.json"></div>Get started
Section titled “Get started”Start with Sounds → Getting Started, then Generator → Sounds manifest for the file-name rules. The release notes are in the changelog.