Skip to content

rarepops/Spektra

Repository files navigation

Spektra

CI Latest release Downloads License .NET 10 Platforms

Spektra

A desktop audio spectrum analyzer: drop in a file to see its spectrogram, drop in a folder to browse a library and audit the files you pick in a live grid, compare encodes side by side, and get an automated "is this really lossless?" verdict.

Features

  • Progressive spectrogram with time/frequency rulers and dB legend
  • Automated bandwidth verdict: detects a lossy low-pass cutoff and reports Lossless / Suspicious / Lossy with a likely codec/bitrate guess
  • Upsampling detection: a hi-res file whose real bandwidth stops at a lower standard rate (a 96 kHz container holding 22.05 kHz of content) is flagged Upsampled, naming the likely true source rate
  • Transcode-aware problems: an honest lossy file is not a problem; the audit flags lossy content hiding in a lossless container, or an mp3/aac whose cutoff sits far below what its bitrate should deliver
  • Export report: save the bandwidth + integrity audit for the current file or a whole folder as CSV/JSON (File → Export Report… / Export Folder Report…)
  • Folder browse-and-audit: drop a folder (or pass it on the command line) for an instant browse tree with any cached verdicts already shown, check the files or folders you want and press Analyze to audit just those into a sortable grid with byte-weighted progress, a remaining-time estimate, and a tiered severity filter (all / suspect + worse / problems only), Drilldown to focus the grid on one subtree, all backed by a persistent cache shared with the CLI
  • Zoom & pan: wheel = time zoom, Shift+wheel = frequency zoom, drag = pan, double-click = reset (zoomed spans re-render sharply via ffmpeg segment decode)
  • Cursor readout (time, frequency, dB) and a toggleable average-spectrum overlay (peak-hold + time-average)
  • Preferences: FFT size, window function (Hann/Hamming/Blackman/Blackman-Harris), color palette (Turbo by default, plus Magma/Inferno/Plasma/Viridis/Cividis/Grayscale, mono phosphor ramps, and custom palettes as JSON files with even anchors or stops pinned to a dB level), a tightness curve for how fast quiet detail fades to black, dynamic-range floor, and a linear or logarithmic frequency axis
  • Save the spectrogram to PNG (Ctrl+S) or copy it to the clipboard (Ctrl+Shift+C)
  • Tabs: open many files at once (dialog, drag-drop, or CLI args)
  • Per-channel or mixdown analysis for multichannel files
  • Recent files + window placement remembered across runs
  • Compare two files: stacked spectrograms on a shared time axis, synced zoom/pan, manual + automatic (cross-correlation) time alignment, A/B flip, and a signed A−B difference view (diverging colormap) with a numeric diff score
  • Null test (time-domain A−B residual) and drift detection for misaligned encodes
  • Integrity check: flags corrupt frames, missing data (interior digital silence), and truncated (partially downloaded) files, in the app (Ctrl+I) or the CLI; silent gaps and the missing tail are marked on a lane along the time axis
  • Loudness & dynamics: integrated LUFS, loudness range, true peak, crest factor, and a clipping hint (EBU R128 via ffmpeg), in the app (Ctrl+L) or the CLI

Keyboard shortcuts

Shortcut Action
Ctrl+O · Ctrl+Shift+O Open audio files · open a folder to audit
Ctrl+W · Ctrl+Tab Close tab · switch tabs (Shift to reverse)
Ctrl+S · Ctrl+Shift+C Save the spectrogram to PNG · copy it to the clipboard
Ctrl+E · Ctrl+R Preferences · toggle the average-spectrum overlay
Ctrl+I · Ctrl+L Check integrity · measure loudness (press again to hide/show)
Wheel · Shift+Wheel Zoom time · zoom frequency
Drag · Double-click Pan · reset the view
T · D · A · Esc Compare view: flip A/B · difference · auto-align · back to both
Ctrl+D · Ctrl+Shift+S Compare two files · export the current file's report
Ctrl+0 · Ctrl+1..Ctrl+9 Reset the view · jump to tab N
Ctrl+Up / Ctrl+Down · F5 Previous / next channel · reload the file or analyze the folder's checked files (Shift+F5 = ignore the cache)
Ctrl+H Toggle the crosshair (cursor line + readout)

Check for a newer release any time from Help → Check for Updates. Spektra never updates itself; it only tells you when a newer release exists and links to it. You can also enable a quiet once-a-day check on startup in Preferences.

Documentation

  • GUI guide: inspecting files, verdict banners, compare workflows, integrity/loudness checks, report export.
  • CLI guide: every command with sample output, JSON/CSV reports, exit codes, and scripting examples.

Download

Grab the latest build from the releases page:

  • Spektra-<version>-Setup.msi: the Windows installer for the desktop app (can add spektra to your PATH).
  • Spektra-<version>-win-x64.zip: the portable desktop app, no install needed.
  • spektra-cli-<version>-<os>.zip: the command-line tool (Windows, Linux, macOS).

Spektra isn't code-signed yet, so Windows SmartScreen may show "Windows protected your PC" or an Unknown Publisher prompt. That's expected for an unsigned open-source build, not a sign of a problem: choose More info → Run anyway to continue. To verify a download first, check it against the SHA256SUMS.txt published with each release:

# Windows (PowerShell)
(Get-FileHash .\Spektra-<version>-Setup.msi -Algorithm SHA256).Hash

# Linux / macOS
sha256sum -c SHA256SUMS.txt

Requirements

  • Windows (primary target; Avalonia keeps Linux/macOS possible)
  • ffmpeg + ffprobe, found via the app folder, %LOCALAPPDATA%\Spektra\ffmpeg, or PATH. If missing, Spektra offers a one-click download. ffmpeg is invoked as a separate process and is not linked or bundled.

Build & run

dotnet run --project src/Spektra.App -- <optional-audio-file>

Compare two files directly (also available in-app via File → Compare…):

dotnet run --project src/Spektra.App -- --compare <fileA> <fileB> [--auto] [--mode diff]

Command line

Spektra ships a small cross-platform companion CLI (spektra) that reuses the analysis engine. It writes to stdout and exits 1 on findings (for audit: a transcode, an upsample, or corruption; an honest lossy file is fine):

spektra report <file|folder> ...   Bandwidth verdict per file.
spektra scan <folder>              Compact bandwidth scan of a library.
spektra check <file|folder> ...    Integrity check (corruption / missing data).
spektra audit <file|folder> ...    Bandwidth + integrity together (cached).
spektra loudness <file|folder> ... Loudness (LUFS), true peak, and dynamics.
spektra diff <fileA> <fileB>       Compare two files: align, spectral diff, null test.
spektra image <file>               Render the spectrogram to a PNG (no window).

Add --json or --csv to any command for a machine-readable report:

spektra scan Music --csv > library.csv

spektra diff exits 0 when two files are effectively identical (verify a rip or transcode is transparent) and 1 when they differ; spektra --version prints the version.

Full command reference with sample output and scripting recipes: docs/cli.md.

(--report / --scan are accepted too.) Build it with dotnet publish src/Spektra.Cli -c Release.

Test

dotnet test

License

PolyForm Perimeter 1.0.1. © Rares (rarepops).

About

Desktop audio spectrum analyzer: spectrograms, an automated lossless/transcode verdict, whole-library audit with a persistent cache, encode comparison, and integrity/loudness checks. Avalonia / .NET.

Resources

License

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors