Streaming Waveforms You Click to Seek

Streaming Waveforms You Click to Seek

By Noah Zoschke 3 min read

Digging through a library is a listening task, but most catalogs make it a reading task — rows of titles you have to open one at a time to hear. deadca7 puts the sound on the screen. Every track shows a waveform you click to play, pause, and seek.

Click anywhere on the wave

The waveform isn’t decoration; it’s the transport. Click near the start and it plays from there. Click into the breakdown and it seeks straight to it. Click again to pause. The whole interaction is the wave itself — no separate scrubber, no opening a detail view first. You scan a collection by shape and audition by pointing.

Audio is streamed straight from the source as you play. There’s no “download the whole track, then listen” step in the way of hearing it. You point at a moment and the moment plays.

Three bands: low, mid, high

A flat gray blob tells you where the loud parts are and nothing else. deadca7’s waveforms are three-bandlow, mid, and high — so the picture carries real information about the track’s structure.

At a high level, the source audio is split into low, mid, and high frequency ranges, and for each range we measure the energy over short slices of time — an RMS (root-mean-square) reading, which is just the average loudness of that band in that slice rather than a single instantaneous peak. Those per-band energies are what get drawn.

The result is that the shape of a track tells you something useful at a glance:

  • A bassline drives the low band — kicks and sub energy read as the bottom layer.
  • Vocals, synths, and melody live mostly in the mid band.
  • Hats, cymbals, and air light up the high band.

A breakdown where the low band drops out is obvious before you ever click. A build where the highs climb is right there in the picture. For a DJ deciding what mixes into what, that’s the difference between scanning and guessing.

Generated once with ffmpeg, then cached

Computing a three-band waveform for every track up front would be a lot of work you might never need — most tracks in a big import never get auditioned. So deadca7 is lazy about it on purpose.

Waveforms are generated on first play, using ffmpeg to decode the source and produce the per-band data, and then cached. The first time you click a track there’s a moment of analysis; after that the waveform is already there and comes straight from the cache. Import a whole netlabel and you don’t pay for analyzing a thousand tracks — you pay, once, only for the ones you actually reach for.

This pairs naturally with how imports work in deadca7. New albums show up as background imports finish, and the moment you click one to listen, its waveform gets built and cached for next time. Digging stays fluid; the heavy lifting happens exactly when it’s needed and never again.

Why it’s built this way

Streaming-on-demand and lazy-but-cached generation are the same philosophy applied twice: do the minimum work to put sound in front of you now, and never repeat work you’ve already done. ffmpeg does the decoding and analysis; the cache makes the second click instant; streaming means the first click doesn’t wait on a full download.

It also fits the rest of deadca7. Your library is yours to take anywhere, your imports run in the background, and your waveforms come from the source media itself — no black boxes between you and the audio.

Want to try it? The getting started guide gets you running, and features covers the rest. Then import something and start clicking around the waves — it’s the fastest way to dig you’ll find.