VOL. I  ·  NO. 
SUB/WAVE
ON AIR
No skips · No shuffle · Just radio

MANUAL · 13

Acoustic analysis.

Beyond mood and energy tags, SUB/WAVE can listen to each track and measure how it actually sounds — tempo, key, loudness, and, optionally, a 'sounds-like' fingerprint and where the vocals sit. The DJ leans on these to build smoother, better-matched sets. The basics run out of the box; the heavier dimensions are one line away.

WHAT IT MEASURES

Tempo, key & loudness — on by default.

The analyzer is a small service that ships and starts by default alongside the controller — no profile, no flag. It measures each track’s tempo (BPM), musical key, intro length and loudness, and hands them to the DJ as tie-breakers for smoother transitions: a tempo-matched, harmonically-close next track, and the right window to talk over an intro.

The default image is lean — librosa only, no PyTorch — so it stays small and runs natively on both amd64 and arm64 (a NAS, a Pi, Apple Silicon). Coverage climbs on the Library page under Acoustic analysis · bpm / key.

“ENGINE OFF”?

The acoustic-engine indicator is a live reachability check, not a saved setting. If the analyzer container is stopped, existing data still drives picks — only new analysis pauses until it’s back.

THE HEAVY TIER

“Sounds-like” & vocal detection are opt-in.

Two richer dimensions need a heavier model stack (CPU PyTorch — roughly +0.8 GB of image over the lean default), so they are not in the default analyzer:

  • Sounds-like (CLAP) — a learned audio fingerprint, so the DJ can find tracks that sound similar (not just share tags) and build sonic journeys.
  • Vocal activity (Demucs) — separates vocal from instrumental energy, so the DJ knows how long it can talk before the singing starts.

Both live in a separate subwave-analyzer-heavy image. If you turn on Audio fingerprint or Vocal activity on the Library page while running the lean analyzer, you’ll see a note that the engine can’t produce them — that’s the cue to switch to the heavy image below. (This is entirely separate from the tts-heavy voices sidecar, which is TTS-only.)

ENABLING IT

One line, no rebuild.

Set the switch in your root .env and recreate the analyzer — Compose re-pulls it as subwave-analyzer-heavy:

# root .env
ANALYZER_HEAVY=1
docker compose up -d analyzer

By install type:

  • CLI / cloned / raw compose. Add the line to .env and run docker compose up -d analyzer. The subwave setup wizard also offers it.
  • Unraid split-stack. Add ANALYZER_HEAVY=1 to your .env, Save, then Pull & Up.
  • Unraid one-click (AIO). There’s no second container to swap — point the container’s Repository at ghcr.io/perminder-klair/subwave-aio-heavy and re-pull.
ON ARM64

The heavy image is amd64-only (the CPU-torch stack). On an arm64 host (Pi, Apple Silicon, arm cloud) also set DOCKER_DEFAULT_PLATFORM=linux/amd64 — it runs under emulation (slower, but analysis is a one-time per-track pass).

Model weights download lazily into the analyzer’s cache the first time you run a sounds-like / vocals pass. Once the heavy analyzer is up, enable the dimensions on the Library page and run a backfill.