Skip to content

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
  • Compilation-aware: a transcoded track hidden inside a compilation, DJ mix, or continuous set is reported Mixed with the suspect stretch's timestamps, instead of being masked by the genuine tracks around it
  • 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; right-click any row, file, or folder for verbs (open, re-analyze fresh, analyze a folder, copy path, reveal), with multi-row selection honored
  • Duplicate Detective: find duplicate songs across folders by acoustic fingerprint (renames and format changes cannot hide a copy), grouped with confidence levels and the best copy starred; filter big result sets by label or path, jump straight to a side-by-side comparison against the group's winner, and copy the loser paths for use elsewhere; view-only, with HTML/CSV/JSON export
  • Folder Manifest: instantly list everything inside a folder as a tree with honest type chips (cached audio verdicts included) and per-folder composition rollups with recursive byte totals; an address bar swaps folders in place, columns resize and persist, huge listings cancel, and any folder hops into the audit with one click; view-only, filterable by extension, with HTML/CSV/JSON export of exactly what is shown (also scriptable as spektra manifest)
  • 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, with a Start new / Keep last preference deciding whether tabs, scan folders, and the manifest folder come back on launch
  • 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; runs automatically on every file opened in the app (on by default, Preferences toggle; Ctrl+I hides/shows the results) and on demand in 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. Its Options page has a checkbox for adding spektra to your PATH and one for adding Spektra to the Explorer right-click menu.
  • 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

The MSI build's uninstaller removes Spektra and its downloaded copy of ffmpeg. Your settings, custom palettes, and the analysis cache in %APPDATA%\Spektra are kept unless you tick "Also remove settings, palettes, and the analysis cache" while uninstalling.

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 dupes <folder> ...         Find duplicate songs across folders and formats; mark the best copy.
spektra manifest <folder>          List everything in a folder with type chips (no decoding, works without ffmpeg).
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

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages