A fast, sample-accurate, cross-platform audio editor inspired by Sound Forge Pro
Developer: ZQ SFX Copyright: Β© 2025-2026 ZQ SFX License: GPL v3
WaveEdit is a professional audio editor designed for speed, precision, and keyboard-driven workflow. Built with JUCE and inspired by Sound Forge Pro, WaveEdit focuses on getting your audio editing done fast without friction.
- Instant startup: Sub-1 second cold start, no splash screens, no project files
- Sample-accurate editing: Professional-grade precision
- Keyboard-first: Every action has a shortcut (Sound Forge layout by default)
- Fully customizable: Remap any keyboard shortcut
- Cross-platform: Native builds for Windows, macOS, and Linux
- Free and open source: GPL v3 license
Perfect for: Audio engineers, podcasters, sound designers, game developers
Waveform, transport controls, selection markers with duration readout, and the status bar showing sample rate, channel count, bit depth, length, snap mode, time format, and zoom.
Color-coded region browser with name/start/end/duration columns,
in-place search, and one-click Batch Rename. Cmd+Shift+R to open.
Low Shelf / Mid Peak / High Shelf with frequency, gain, and Q
controls. The standardised footer (Preview Β· Bypass Β· Loop Β· Cancel Β·
Apply) is shared across every Process dialog. Shift+E to open.
Real-time FFT with logarithmic frequency axis (20 Hz β 20 kHz), peak
hold (yellow), and a colour gradient from low to high magnitude.
Cmd+Alt+S toggles it on while playback runs.
Apply a DSP chain (gain, normalise, fades, EQ presets, plugin chain)
to many files at once with output naming patterns, format/bit-depth/
sample-rate conversion, and savable presets. Cmd+B to open.
Already built?
# macOS
open ./build/WaveEdit_artefacts/Release/WaveEdit.app
# OR use the script
./build-and-run.command run-onlyNot built yet?
./build-and-run.command- Open: Drag & drop WAV file or press
Cmd+O - Select: Click and drag on waveform
- Edit:
Delete,Cmd+X(cut),Cmd+C(copy),Cmd+V(paste) - Play: Press
Space - Save: Press
Cmd+S
No project files, no import wizards. Just open β edit β save.
Core Editing:
- β Multi-file support with tab-based UI
- β Cut, copy, paste, delete
- β Per-channel editing (double-click to focus individual channels)
- β Undo/redo (100 levels per file)
- β Drag & drop multiple files
- β Save/Save As with error handling
Playback:
- β Play, pause, stop, loop
- β Selection-bounded playback
- β Real-time level meters (peak, RMS, clipping detection)
- β Real-time spectrum analyzer (FFT-based frequency visualization)
DSP Operations:
- β
Gain adjustment (Β±1dB with
Shift+Up/Down) - β 3-band Parametric EQ (Low/Mid/High shelves)
- β 20-band Graphical EQ (Bell, Shelf, Cut, Notch, Bandpass filters with real-time curve)
- β Normalize (0dB peak)
- β Fade in/out with 4 curve types (Linear, Exponential, Logarithmic, S-Curve) and visual preview
- β DC offset removal
- β Silence selection
- β Trim (delete outside selection)
Regions π:
- β Create, rename, delete, navigate
- β Region list panel with search/filter
- β Batch rename (pattern/find-replace/prefix-suffix)
- β Batch export (each region as separate WAV)
- β Merge/split/copy/paste regions
- β Edit boundaries with snap to zero crossings
Metadata π:
- β BWF (Broadcast Wave Format) support
- β iXML metadata with UCS v8.2.1 categories (753 mappings)
- β SoundMiner Extended fields (FXName, Description, Keywords, Designer)
- β
File Properties dialog (
Cmd+Enter) with UCS suggestions - β Persistent metadata embedded in WAV files
Navigation:
- β Sample-accurate selection at any zoom
- β Snap modes: Off, Samples, Ms, Seconds, Frames, Zero
- β Keyboard navigation honors snap mode
- β Go to position (6 time formats supported)
Keyboard Shortcuts:
- β Sound Forge Pro compatibility (default)
- β Fully customizable with GUI editor
- β 3 built-in templates (Default, Sound Forge, Pro Tools)
- β Import/export custom templates
Quality:
- β
Automated test suite (372 groups / ~207,000 assertions locally;
CI is similar with a handful of device-dependent groups skipped via
WAVEEDIT_CI=1, 100% pass rate). Runs locally via./build-and-run.commandand in CI on every push. - β Sub-1 second startup, 60fps rendering
- β <10ms waveform updates, <10ms playback latency
Status: Production-quality for core editing workflows.
Spectrum Analyzer π:
- β Real-time FFT visualization during playback
- β Configurable FFT size (512, 1024, 2048, 4096, 8192 samples)
- β Multiple windowing functions (Hann, Hamming, Blackman, Rectangular)
- β Logarithmic frequency scale (20Hz-20kHz) with peak hold
- β Color gradient visualization (blue β green β yellow β red for magnitude)
- β
Toggle with
Cmd+Alt+Sor View β Spectrum Analyzer - β Configure FFT size and window function from View menu submenus
Batch Processor π:
- β
Process multiple audio files with identical DSP settings (
Cmd+Alt+B) - β DSP chain: Gain, Normalize, DC Offset, Fade In/Out, EQ presets
- β Plugin chain support (apply VST3/AU effect chains)
- β Save/load chain presets via the Plugin Chain window's "Presets..." button β saved presets bundle automation lanes too
- β Output settings: directory, naming patterns, sample rate/bit depth conversion
- β Error handling: stop on error, continue, or skip and log
- β Save/load batch presets for recurring workflows
Plugin Parameter Automation π:
- β Record plugin knob movements during playback (Plugins β Arm Automation Recording)
- β
Visual lane editor (
Cmd+Alt+Lor Plugins β Show Automation Lanes) - β Click empty space to add an automation point; drag to move; right-click to delete or change the curve type (Linear, Step, S-Curve, Exponential)
- β Cmd-click to multi-select; Cmd+A all; drag empty space for rectangle select (Shift+drag adds); Cmd+C/Cmd+V copy/paste (cross-lane supported); Delete removes selection; Esc clears; drag any selected point to move the whole selection
- β
Every point edit is undoable (
Cmd+Z/Cmd+Shift+Z); a whole drag is one undo step - β Per-lane Enabled / Record toggles, live playhead during playback
- β
Automation persists in a
<file>.<ext>.automation.jsonsidecar - βΉοΈ Right-click on individual knobs in third-party plugin UIs is not yet supported β use the editor window's "Automation" toolbar button to arm parameters instead
Crash recovery π:
- β Auto-save runs every minute on modified documents (configurable in Preferences β Auto-Save)
- β When you reopen a file with unsaved changes from a previous session (crash, force-quit, closed without saving), WaveEdit offers to Recover, Discard, or Keep & Continue
- β Saving a file evicts its auto-saves (superseded)
Theme system π:
- β Three built-in themes ship out of the box: Dark (default), Light, and High Contrast (accessibility-tuned, pure-black surfaces with neon-cyan accents). Switch from Preferences β Display; the choice persists across launches.
- β Theme is wired through every visible surface: waveform area, tabs, plugin chain UI, region/marker list panels, automation lanes, command palette, settings panel, shortcut editor, keyboard cheat-sheet, toolbar, and every processing dialog (Gain, Normalize, Fade In/Out, Parametric/Graphical EQ, Head & Tail, Strip Silence, Looping Tools, Auto Region, Offline Plugin, etc.). All re-skin live without a restart.
- β
Custom themes β Preferences β Display has Import/Export
buttons next to the picker. Themes round-trip to a single JSON
file (
id,name, plus an 8-digit ARGB hex per token), so you can drop in a hand-tuned palette without rebuilding the app.
Planned features:
- Additional DSP operations (reverb, compressor, noise reduction; time-stretch + pitch-shift via SoundTouch already shipped under Process menu)
- More export formats
- Plugin preset management improvements
Tagged Releases are published automatically by GitHub Actions when a
v* tag is pushed. Grab the latest from the
Releases page β
download the archive for your platform, extract, and run.
The binaries are unsigned. WaveEdit is a personal-scale project and does not currently ship signed binaries; to launch on macOS or Windows you'll have to bypass the OS's first-run warning once:
- macOS: right-click
WaveEdit.appβ Open β Open. macOS remembers the choice; subsequent launches behave normally. (Or:xattr -dr com.apple.quarantine /Applications/WaveEdit.appfrom a terminal.) - Windows: SmartScreen will say "Windows protected your PC". Click More info β Run anyway.
- Linux:
chmod +x WaveEditand run.
All builds bundle the LAME MP3 encoder, libFLAC, and Ogg Vorbis. No extra install steps are required.
If you'd rather build from source (or you want to grab the work-in-progress build between releases, available as a 30-day artifact under Actions), follow the developer steps below.
Prerequisites:
- CMake 3.15+
- C++17 compiler
- JUCE 7.x (included as submodule)
- LAME library (for MP3 encoding support)
Quick build (recommended):
git clone https://github.com/themightyzq/WaveEdit.git
cd WaveEdit
./build-and-run.commandAdditional options:
./build-and-run.command # Build and launch
./build-and-run.command run-only # Launch without building
./build-and-run.command clean # Clean build
./build-and-run.command debug # Debug build
./build-and-run.command help # Show all optionsManual build (if you prefer CMake commands directly):
git clone https://github.com/themightyzq/WaveEdit.git
cd WaveEdit
git submodule update --init --recursive
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release
# Launch
open ./WaveEdit_artefacts/Release/WaveEdit.app # macOS
./WaveEdit_artefacts/Release/WaveEdit # Linux
.\WaveEdit_artefacts\Release\WaveEdit.exe # WindowsDeveloper dependencies:
macOS:
# Xcode command line tools
xcode-select --install
# LAME MP3 encoder (required for MP3 support)
brew install lame
# SoundTouch (required for Time Stretch and Pitch Shift)
brew install sound-touchLinux (Ubuntu/Debian):
# Build tools and audio dependencies
sudo apt-get install build-essential cmake libasound2-dev \
libjack-jackd2-dev libfreetype6-dev libx11-dev libxrandr-dev \
libxinerama-dev libxcursor-dev libgl1-mesa-dev
# LAME MP3 encoder (required for MP3 support)
sudo apt-get install libmp3lame-dev
# SoundTouch (required for Time Stretch and Pitch Shift)
sudo apt-get install libsoundtouch-devWindows:
- Visual Studio 2017+ (open generated
.slnfile) - LAME MP3 encoder: Download from https://lame.sourceforge.io/
- SoundTouch: Download from https://www.surina.net/soundtouch/
Note for developers: LAME is only required for building from source. Release builds automatically bundle LAME, so end users don't need to install it separately.
Build and run tests:
cmake --build build --target WaveEditTests
./build/WaveEditTests_artefacts/Debug/WaveEditTestsTest output:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WaveEdit Automated Test Suite by ZQ SFX β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Total test groups: 372
Total assertions: 206947
Passed: 206947
Failed: 0
β
All tests PASSED
Test infrastructure:
- Unit tests: Individual components (AudioEngine, AudioBufferManager, etc.)
- Integration tests: Components working together
- End-to-end tests: Complete workflows (open β edit β save)
All shortcuts are customizable. The default layout (Default.json) is
the source of truth; the table below is generated from it. On
Windows/Linux, replace Cmd with Ctrl.
To see, search, or remap shortcuts inside the app: Cmd+/ opens the
shortcut reference and Cmd+, β Keyboard Shortcuts tab opens the
editor.
| Action | Shortcut |
|---|---|
| New File | Cmd+N |
| Open File | Cmd+O |
| Save | Cmd+S |
| Save As | Cmd+Shift+S |
| File Properties | Alt+Enter |
| Edit BWF Metadata | Cmd+Alt+B |
| Preferences | Cmd+, |
| Quit | Cmd+Q |
| Action | Shortcut |
|---|---|
| Select All | Cmd+A |
| Extend selection (by snap) | Shift+Left/Right |
| Extend to visible start/end | Shift+Home/End |
| Extend by page | Shift+PageUp/PageDown |
| Action | Shortcut |
|---|---|
| Cut | Cmd+X |
| Copy | Cmd+C |
| Paste | Cmd+V |
| Delete | Delete |
| Silence Selection | Shift+Alt+S |
| Trim (delete outside selection) | Cmd+T |
| Undo | Cmd+Z |
| Redo | Cmd+Shift+Z |
| Action | Shortcut |
|---|---|
| Play | Space |
| Pause | Enter |
| Stop | Escape |
| Toggle Loop | L |
| Loop Region | Cmd+Shift+L |
| Record | Cmd+R |
| Action | Shortcut |
|---|---|
| Move cursor (honors snap) | Left/Right |
| Jump to start/end | Cmd+Left/Right |
| Jump to visible start/end | Home/End |
| Page left/right | PageUp/PageDown |
| Center view on cursor | . |
| Go to Position | Cmd+Shift+G |
| Action | Shortcut |
|---|---|
| Zoom In | Cmd+= |
| Zoom Out | Cmd+- |
| Zoom to Selection | Cmd+E |
| Zoom to Region | Cmd+Alt+Z |
| Zoom to Fit | Cmd+Shift+0 |
| Zoom 1:1 | Cmd+0 |
| Action | Shortcut |
|---|---|
| Cycle Snap Mode | T |
| Toggle Zero-Crossing Snap | Z |
| Cycle Time Format | Shift+T |
| Action | Shortcut |
|---|---|
| Gain Dialog | G |
| Increase Gain (+1 dB) | Shift+Up |
| Decrease Gain (-1 dB) | Shift+Down |
| Normalize | Cmd+G |
| Fade In | Cmd+F |
| Fade Out | Cmd+Shift+O |
| DC Offset Removal | Cmd+Shift+D |
| Parametric EQ | Shift+E |
| Graphical EQ | Cmd+Alt+E |
| Channel Converter | Cmd+Shift+U |
| Batch Processor | Cmd+B |
| Action | Shortcut |
|---|---|
| Show Plugin Chain | Cmd+Shift+P |
| Apply Plugin Chain | Cmd+P |
| Show Automation Lanes | Cmd+Alt+L |
| Action | Shortcut |
|---|---|
| Add Region | R |
| Strip Silence to Regions | Shift+R |
| Region List Panel | Cmd+Shift+R |
| Batch Rename | Cmd+Shift+B |
| Batch Export | Cmd+Alt+R |
| Merge Regions | Cmd+J |
| Split Region | Cmd+K |
| Copy Regions | Cmd+Alt+C |
| Paste Regions | Cmd+Alt+V |
| Delete Region | Cmd+Delete |
| Next / Previous Region | ] / [ |
| Select All Regions | Cmd+Alt+A |
| Invert Region Selection | Cmd+Shift+I |
| Nudge Region Start | Cmd+Alt+Left/Right |
| Nudge Region End | Shift+Alt+Left/Right |
| Edit Boundaries | Right-click β Edit Boundaries |
| Action | Shortcut |
|---|---|
| Add Marker | M |
| Marker List Panel | Cmd+Shift+K |
| Next Marker | Shift+] |
| Previous Marker | Shift+[ |
| Delete Marker | Cmd+Shift+Delete |
| Action | Shortcut |
|---|---|
| Auto-Scroll | Cmd+Shift+F |
| Auto-Preview Regions | Cmd+Alt+P |
| Spectrum Analyzer | Cmd+Alt+S |
| Action | Shortcut |
|---|---|
| Next Tab | Ctrl+Tab |
| Previous Tab | Ctrl+Shift+Tab |
| Close Tab | Cmd+W |
| Close All Tabs | Cmd+Shift+W |
| Select Tab 1-9 | Cmd+1 β¦ Cmd+9 |
| Action | Shortcut |
|---|---|
| Keyboard Shortcuts Reference | Cmd+/ |
| Command Palette | Cmd+Shift+A |
Note:
Cmdkey on macOS =Ctrlkey on Windows/Linux.
All user state β settings.json, plugin scan caches, keymaps,
toolbars, batch presets, autosave files β lives under a single
parent directory:
- macOS:
~/Library/Application Support/WaveEdit/ - Windows:
%APPDATA%\WaveEdit\ - Linux:
~/.config/WaveEdit/
Top-level files: settings.json (recent files, audio device,
auto-save), plugins.xml, plugin_blacklist.txt,
custom_plugin_paths.txt, plugin_incremental_cache.xml,
scan_log.txt.
Subfolders: autosave/ (in-progress auto-saves),
Keymaps/ (built-in + user keyboard templates),
Toolbars/ (toolbar layouts),
Presets/Batch/ (batch processor presets).
Migration note (macOS): builds before 2026-04-29 wrote
settings.json and the plugin scan cache to ~/Library/WaveEdit/
instead of the canonical Application Support path. On first launch
the new build copies anything from the legacy location into the new
one and leaves the old folder in place as a backup; you can
rm -rf ~/Library/WaveEdit once you've confirmed your recents and
plugin list look right.
UI preferences (window size, dB scale, refresh rate):
- macOS:
~/Library/Preferences/com.waveedit.app.plist(managed by the system; usedefaults read com.waveedit.appto inspect). - Windows / Linux: stored alongside
settings.jsonabove.
Application log β useful when reporting bugs:
- macOS:
~/Library/Logs/WaveEdit/WaveEdit.log - Windows:
%APPDATA%\WaveEdit\WaveEdit.log - Linux:
~/.config/WaveEdit/WaveEdit.log
The log records startup, audio-device init, errors, and unsaved-changes events. Attach it when filing an issue.
Crash reports: if WaveEdit hits a fatal signal, a single
timestamped report (time, version, OS, stack backtrace) is written
next to the session log under a crashes/ subfolder
(e.g. ~/Library/Logs/WaveEdit/crashes/crash-YYYY-MM-DD_HH-MM-SS.txt).
Attach the most recent one when reporting a crash.
To uninstall completely (macOS):
# Quit WaveEdit first, then:
rm -rf "~/Library/Application Support/WaveEdit"
rm -rf ~/Library/Logs/WaveEdit
rm -rf ~/Library/WaveEdit # legacy path; only if you used a pre-2026-04-29 build
defaults delete com.waveedit.app
# Optional: remove the app bundle itself
rm -rf /Applications/WaveEdit.appCustomizing keyboard shortcuts? Open Preferences (
Cmd+,) β Keyboard Shortcuts tab. There is nokeybindings.jsonβ keymap templates live as named JSON files insideKeymaps/.
- Framework: JUCE 7.x
- Language: C++17
- Build System: CMake
- Audio I/O: JUCE audio engine (CoreAudio/WASAPI/ALSA)
- Open an issue before major work
- Follow coding standards below
- Write tests for new features
- Update documentation
Coding standards:
- C++17 or later
- 4-space indentation, Allman braces
- PascalCase classes, camelCase methods
- Document all public methods
Pull request process:
- Fork the repository
- Create feature branch (
feature/your-feature) - Follow Conventional Commits
- Push to your fork
- Open pull request with clear description
- Startup: <1 second
- File load (10min WAV): <2 seconds
- Rendering: 60fps
- Playback latency: <10ms
- Save: <500ms
Q: Why JUCE instead of Electron/Tauri? A: JUCE is purpose-built for audio with sample-accurate timing and low-latency I/O that web frameworks can't match.
Q: Will you add multi-track editing? A: No. WaveEdit is a stereo/mono editor, not a DAW. Use Reaper or Ardour for multi-track.
Q: Can I use WaveEdit commercially? A: Yes! GPL v3 allows commercial use.
Q: How do I customize keyboard shortcuts?
A: Open Preferences (Cmd+,) β Keyboard Shortcuts tab.
Q: Does WaveEdit support destructive editing? A: Non-destructive with undo/redo. Original file only overwritten when you save.
GNU General Public License v3.0
- β Use for any purpose (personal, commercial)
- β Modify and distribute
- β Must distribute source code with binaries
- β Derivative works must also be GPL v3
See LICENSE for full details.
Developed by: ZQ SFX
Built with:
- JUCE - Cross-platform C++ framework
- Inspired by Sound Forge Pro
Thanks to:
- JUCE community
- Sound Forge Pro for setting the standard
- All contributors and testers
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Version: 0.1.0 Last Updated: 2026-05-05




