Skip to content

ScherbakovAl/wavescope

Repository files navigation

Wavescope

DOI

A GPU wavelet scalogram viewer for audio.

GPU-accelerated continuous-wavelet-transform (CWT) viewer for WAV/FLAC audio. Interactive scalogram with zoom/pan and amplitude / synchrosqueezed / superlet / phase / instantaneous-frequency / cross-channel-phase views, built for hunting subtle phase dynamics (oscillator synchronisation, frequency pulling, phase slips).

Four analytic wavelet families to analyse with:

  • Morlet — Gaussian in frequency, classic balanced time/frequency.
  • Generalized Morse — two knobs (β, γ) tune symmetry and the time/frequency trade-off independently; generalises Morlet and Paul.
  • Bump — compact in frequency ⇒ very sharp frequency lines, good for close stationary tones.
  • Paul — excellent time localisation ⇒ good for transients and onsets.

Sharpened amplitude views

  • Synchrosqueezed — amplitude reassigned along the frequency axis to each pixel's instantaneous frequency: ridges of quasi-harmonic components collapse to ~1-row lines. Display-side post-processing, no extra compute.
  • Synchro+Phase — same reassignment with the carrier phase carried along as a complex sum Σ a·e^{iφ}: hue = reassigned phase, saturation = phase agreement of the mass landing in the bin, brightness = squeezed amplitude.
  • Superlet — geometric mean of amplitudes over CWT passes with the wavelet's frequency-sharpness parameter scaled ×1…×order (multiplicative superlets, Moca et al. 2021). Sharper in both axes; costs order compute passes.

Phase analysis

  • Inst. frequency view — per-pixel relative deviation (f_inst − f_row)/f_row on a diverging blue↔red map, with nominal or detrended baseline. The estimator is arg Σ W(t+1)·W̄(t); an optional unweighted mode averages unit-magnitude phase increments instead, so phase slips that coincide with amplitude dips are not underweighted.
  • Cross phase (L−R) — for stereo files: hue = arg(W_L·W̄_R) (relative phase between channels), saturation = cross-coherence, brightness = geometric-mean amplitude. The canonical observable for synchronisation analysis.
  • Ridge tracking & CSV export — double-click a ridge to track it across the view; export the trace (time, f_inst, amplitude, phase, coherence) as CSV.

Processing is measurement-friendly by construction: L1-normalised wavelets (equal-amplitude tones are equally bright at any frequency and zoom), zero-phase half-band FIR decimation (flat passband, no phase distortion), and time-chunked compute so arbitrarily long files render in full within a bounded VRAM budget.

Controls

  • Scroll — zoom time axis · Ctrl+Scroll — zoom frequency axis (at cursor)
  • Shift+Scroll — pan frequency · Alt+Scroll — pan time · Drag — pan time
  • Double-click — pick a ridge · Right-click — reset view

Zoom is centred on the cursor. On macOS the frequency zoom also responds to ⌘+Scroll and to a trackpad pinch.

Cross-platform via wgpu: compute runs on Vulkan (Linux/Windows), Metal (macOS) or DX12 (Windows), so it works on NVIDIA, AMD, Intel and Apple GPUs.

Download

Prebuilt binaries for Linux, Windows and macOS are attached to each GitHub Release:

  • Linux…-linux-x86_64.tar.gz (extract and run wavescope)
  • Windows…-windows-x86_64.zip (extract and run wavescope.exe)
  • macOS…-macos-universal.zip (universal Intel + Apple Silicon .app)

macOS: the app is not code-signed. On first launch macOS Gatekeeper will block it — right-click the app → OpenOpen, or run xattr -dr com.apple.quarantine "Wavescope.app".

A GPU with a Vulkan / Metal / DX12 driver is required.

Build from source

Requires a stable Rust toolchain.

cargo build --release
# binary at target/release/wavescope

Linux build dependencies

sudo apt-get install -y \
  libxkbcommon-dev libwayland-dev \
  libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
  libgl1-mesa-dev

Tests

The FFT and end-to-end scalogram tests need a real GPU adapter; they self-skip when none is available.

cargo test

Releasing

Pushing a v* tag triggers .github/workflows/release.yml, which builds all three platforms, packages them (universal .app on macOS) and uploads the archives to the matching GitHub Release.

git tag v0.1.0
git push origin v0.1.0

.github/workflows/ci.yml compiles and lints (clippy -D warnings) on Linux, Windows and macOS for every push / pull request.

Citation

If you use Wavescope in your research, please cite it via its archived Zenodo record:

@software{wavescope,
  author    = {Scherbakov, Alexey},
  title     = {Wavescope: A GPU Wavelet Scalogram Viewer for Audio},
  year      = {2026},
  publisher = {Zenodo},
  doi       = {10.5281/zenodo.20573387},
  url       = {https://doi.org/10.5281/zenodo.20573387}
}

The DOI 10.5281/zenodo.20573387 always resolves to the latest release.

License

Released under the MIT License.

About

GPU-accelerated continuous wavelet transform (CWT) scalogram viewer for WAV/FLAC audio — interactive zoom/pan with amplitude, phase & instantaneous-frequency views. Morlet, Generalized Morse, Bump & Paul wavelets. Cross-platform via wgpu (Vulkan/Metal/DX12).

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages