Native C++ desktop application and CLI for detecting non-speech artifacts in long-form voice recordings — breaths, mouth clicks, and long pauses — with waveform visualization, batch processing, and surgical editing.
Project site source: docs/ contains the polished landing page. GitHub Pages can publish it once the repository is public or the account plan supports Pages for private repositories.
| Area | What you get |
|---|---|
| Detection | Pause (RMS), click/plosive (transient), breath (spectral HF) |
| Visualization | Waveform, RMS envelope, composite heatmap, spectrogram (ImGui + ImPlot) |
| Remediation | Spectral attenuation (--clean) or physical cut + crossfade (--cut) |
| Export | JSON markers, pro-editor sidecars (CSV, EDL, FCP XML, Reaper, Audition, Audacity), cleaned/edited WAV |
| Batch | Headless CLI with presets, logging, JSON reports, recursive folders |
| Safety | Source files are never modified — all outputs go to a separate folder |
Import (via libsndfile + vcpkg codecs):
WAV · MP3 · FLAC · OGG · Opus · AIFF · CAF · W64 / RF64
Export (analysis outputs): lossless WAV (cleaned / edited), plus JSON and label sidecars.
MP3 and Opus decoding require the
mpegandexternal-libslibsndfile features — already enabled invcpkg.json.
Grab the latest portable Windows x64 zip from Releases, or use the tracked build in dist/. Keep all files together and run audio_tool.exe (GUI) or audio_tool_cli.exe help (CLI). See dist/README.txt.
- Open a voice recording (
WAV,MP3,FLAC, etc.) - Click Analyze
- Review markers on the waveform and heatmap
- Export markers, labels, cleaned WAV, or edited (cut) WAV
Shift+Click any graph to seek; all plots stay time-synced.
audio_tool_cli shares the exact same DSP pipeline as the GUI.
# Analyze a single file (outputs to <input_dir>/audio-tool-out)
audio_tool_cli analyze "D:\recordings\episode.mp3"
# Bulk-process a folder, also writing cleaned WAVs
audio_tool_cli batch "D:\recordings" --out-dir "D:\out" --clean --recursive
# Use a saved preset
audio_tool_cli batch "D:\recordings" --config presets\podcast.json
# Physically cut pauses + breaths and re-stitch
audio_tool_cli batch "D:\recordings" --out-dir "D:\out" --cut pauses,breaths
# Export Audacity labels for manual editing in a DAW
audio_tool_cli analyze "D:\recordings\episode.flac" --labels
# Export all pro-editor marker sidecars (CSV, EDL, FCP XML, Reaper, Audition, Audacity)
audio_tool_cli analyze "D:\recordings\episode.wav" --export-markers all
# QA pass over a folder of real recordings
python scripts\qa_batch.py "D:\recordings" --out qa-out
# Write a default config you can edit
audio_tool_cli init-config mypreset.json
audio_tool_cli helpFor input <name>.<ext> (written to the output folder, never over the source):
| File | When |
|---|---|
<name>.markers.json |
Always |
<name>.report.json |
Always |
<name>.cleaned.wav |
--clean |
<name>.edited.wav |
--cut |
<name>.labels.txt |
--labels |
<name>.markers.csv |
--export-markers (includes csv) |
<name>.markers.edl |
--export-markers (includes edl) |
<name>.markers.fcpxml |
--export-markers (includes fcpxml) |
<name>.reaper-markers.csv |
--export-markers (includes reaper) |
<name>.audition-markers.csv |
--export-markers (includes audition) |
batch-summary.json |
Batch mode |
--out-dir · --config · --clean · --cut <pauses,clicks,breaths> · --crossfade-ms · --labels · --export-markers <all|csv,edl,...> · -r/--recursive · --force · --dry-run · --no-pauses/--no-clicks/--no-breaths · --log-level · --log-file
--clean attenuates artifacts in place (same length). --cut removes flagged regions and crossfades joins (shorter file).
Exit codes: 0 ok · 1 partial failure · 2 bad args · 3 fatal
Requirements: Windows 10/11, Visual Studio 2022 Build Tools (C++), CMake 3.24+, Ninja, Python 3 (fixtures)
cd C:\Users\jonat\CODE\audio-tool
if (-not (Test-Path external\vcpkg\vcpkg.exe)) {
git clone --depth 1 https://github.com/microsoft/vcpkg.git external\vcpkg
.\external\vcpkg\bootstrap-vcpkg.bat -disableMetrics
}
python scripts\gen_fixtures.py
cmake --preset default
cmake --build --preset default
ctest --preset defaultRun: .\build\audio_tool.exe · .\build\audio_tool_cli.exe help
The project site lives in docs/ and is ready to deploy via .github/workflows/pages.yml.
First-time setup: Repo → Settings → Pages → Build and deployment → Source: GitHub Actions. The site auto-deploys on pushes to main that touch docs/.
Branch safety: Only you have admin access on the repo. To harden main further, enable branch protection in GitHub Settings → Branches (require the build-test CI check, block force pushes). A starter rules file lives in .github/branch-protection.json.
| Path | Purpose |
|---|---|
src/core/ |
DSP engine, detectors, pipeline, editor |
src/app/ |
Desktop GUI |
src/cli/ |
Headless batch CLI |
docs/ |
GitHub Pages site |
tests/unit/ |
Catch2 unit tests |
presets/ |
Example JSON detector presets |
dist/ |
Portable Windows build |
ml/ |
Future ML training / ONNX export |
scripts/ |
Synthetic fixtures, QA batch runner, release packaging |
FFTW3 is GPL. libsndfile is LGPL. MP3 encode/decode pulls in LAME (LGPL). Suitable for private development; evaluate license implications before commercial distribution.