waveform is a desktop WAV player and waveform viewer built with iced, inspired by the original vulkan-waveform project.
It takes a single WAV path on the command line, decodes the file into memory, starts playback immediately when a default audio device is available, and renders a live multi-channel waveform in a native desktop window.
The waveform view is GPU-backed: the app uploads precomputed peak bins for each channel, aggregates them into screen columns in a compute pass, and draws the result in an iced shader widget with a live playhead.
- Native
iceddesktop UI with an industrial dark control surface - Live WAV playback through
rodio - GPU-backed waveform aggregation and rendering
- Multi-channel display with live playhead, zoom, pan, fit, loop, and follow mode
- Transport controls for restart, skip, gain, volume, and playback speed
- Manual WAV decoding for PCM and float RIFF/WAVE files
- Graceful fallback when audio initialization fails: the window still opens and the waveform remains usable
cargo run --release -- path/to/file.wavShow CLI help:
cargo run -- --helpThe CLI accepts exactly one positional WAV file. Unknown flags fail, and passing more than one file fails.
This project depends on:
icedrodio- a working graphics stack supported by
wgpu - a default audio output device for playback
If no default audio device is available, the app still opens and renders the waveform, but transport actions remain inert and a status message is shown in the sidebar.
Play/Pause: toggle playbackRestart: jump back to the beginningBack 5S/Fwd 5S: seek in fixed stepsLoopandFollow: toggle looping and automatic viewport followingGain,Volume,Speed: adjust waveform scale and playback behavior- Left-drag on the waveform: seek
- Right-drag on the waveform: pan the visible time window
- Mouse wheel on the waveform: zoom around the cursor
- Horizontal scroll on the waveform: pan
Keyboard shortcuts:
Space: play/pauseHome: restartLeft/RightorJ/K: skip backward or forward 5 secondsShift+Left/Rightor[/]: pan viewportUp/Downor+/-: zoom0: fit the whole fileF: toggle follow-playheadL: toggle looping
- The window opens at
1320x860 - Playback position updates every 16 ms
- Follow mode keeps the playhead in view until you manually pan
- Zooming anchors around the mouse cursor when possible
- There is intentionally no file picker, playlist, spectrogram, or editing UI
- PCM 8-bit
- PCM 16-bit
- PCM 24-bit
- PCM 32-bit
- IEEE float 32-bit
- IEEE float 64-bit
- Basic
WAVE_FORMAT_EXTENSIBLEvariants that map back to PCM or float