Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

WaveWash

tests status license

Check, repair and clean audio datasets before you train on them.

Point WaveWash at a folder of audio and tell it what you are training (speech recognition, voice synthesis, speaker ID, music generation). It checks every file, repairs what it can verify is fixed, moves the rest to an error folder with a labeled reason, sets duplicates aside, and writes a full audit log. Your original files are never modified.

Status: alpha (0.1.0a1). It works on the cases in its test suite, but it has not yet been validated on large real-world speech corpora. Treat its verdicts as a first pass and listen to a sample of what it keeps and rejects. See Limitations.

WaveWash app

Why

Models inherit the flaws of their audio: clipped or distorted takes, DC offset, background noise, low-quality copies of better recordings, duplicates that quietly inflate test scores, empty or broken files. These are usually found by hand (listening to thousands of files) or not at all. WaveWash puts the common checks in one tool and tells you why each file was kept, repaired or rejected.

Install

python3 -m venv ~/wavewash-env
source ~/wavewash-env/bin/activate      # Windows: wavewash-env\Scripts\activate
pip install wavewash
wavewash doctor                         # confirms the install works

Python 3.10 or newer. No Node.js needed: the web app ships inside the package.

Optional extras: pip install "wavewash[lang]" (transcript language check), [plots] (spectrograms in review samples), [vad] (Silero VAD, pulls in PyTorch), [whisper] (WER check).

Use it

Web app (runs only on your machine, at http://127.0.0.1:8420):

wavewash app

Pick a purpose, choose an input folder (subfolders are included) and an output folder, click run.

Command line:

wavewash run --input ./raw_audio --output ./out/clean --purpose asr
wavewash run --help

Purposes: asr, tts, speaker_id, music_gen, custom.

What you get

out/
  clean/          audio that passed, or was repaired and re-checked
  _error/         rejected files, in folders named by reason (low_snr/, clipping/, corrupt_or_unreadable/ ...)
  _duplicates/    duplicates, copied here (nothing is deleted)
  _logs/          audit_log_*.csv and .json (one row per file: what was found, what was fixed, why rejected), summary_*.md

What it checks and repairs

Checks Repairs (only kept if a re-check shows they helped)
Unreadable, empty or truncated files DC offset removal
Too short / too long for the purpose De-clipping of short clipped runs (up to 8 ms, spline interpolation)
Signal-to-noise ratio (estimate) Noise reduction (spectral subtraction, kept only if the SNR estimate improves)
Clipping, DC offset, loudness Loudness normalisation, resampling, channel conversion to the purpose's targets
Silence: mostly-silent files, long gaps Trimming silence at the edges
Lossy or low-pass sources (sharp spectral cliff)
Exact duplicates, same-samples duplicates, near-duplicates (same take, different level or format)
Multiple speakers (heuristic)
Optional: transcript language, WER against Whisper, speaker/session train-validation split

Repair is classical signal processing, not machine learning.

Limitations

Please read these before trusting a result.

  • Alpha, tested on synthetic data. The test suite plants known defects (DC offset, clipping, duplicates, broken, empty and stereo files, other sample rates) and checks the routing, that originals are never modified, the local server's safety rules and the command line. It has not been validated on large real speech corpora; thresholds are reasoned defaults.
  • "Repaired" means "passed the re-check", not "restored". De-clipping interpolates over saturated samples. On heavily clipped audio the re-check can pass even though the result is far from the original recording. Listen to repaired files.
  • Reverb (RT60) is a warning only. Measured against synthetic rooms of known reverb time, the blind estimate could not tell dry from reverberant audio, so it never rejects a file.
  • Heuristics, not trained models: the SNR estimate, the multi-speaker check and the near-duplicate threshold. Check their verdicts on your own data.
  • Music: mid-track silence is not flagged, and moderate noise can go unnoticed.
  • Not yet measured: whether cleaned data improves a trained model; speed and memory on very large datasets; real Whisper and Silero runs.
  • The web app has no login and binds to 127.0.0.1 only. Do not expose it to a network.

Development

git clone https://github.com/BoobalanArjunan/wavewash.git
cd wavewash
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
python -m pytest -q

The front-end source is in frontend/ (React + Vite). The built app is committed in src/wavewash/static/; to rebuild it: cd frontend && npm ci && npm run build, then copy dist/ over src/wavewash/static/.

Documentation: step-by-step guide · user manual

Contributing

Bug reports with a small example file are the most useful contribution. If WaveWash rejects a good file or passes a bad one, please open an issue with the log row for that file (from _logs/audit_log_*.csv).

License

MIT

Metadata

Release files for wavewash 0.1.0a1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wavewash 0.1.0a1
File Size Uploaded
wavewash-0.1.0a1.tar.gz 438.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wavewash 0.1.0a1
File Interpreter ABI Platform
wavewash-0.1.0a1-py3-none-any.whl Python 3 none any Details

Total release size: 693.4 kB

Release files / wavewash-0.1.0a1.tar.gz

Download URL wavewash-0.1.0a1.tar.gz
Size 438.4 kB
Tags Source
SHA-256 checksum
How to use checksums
72dcf8cfc6b9dd97759f0c314aa3446afa2f5d0bd992764c3d1a064d035c0776
BLAKE2b-256 checksum
How to use checksums
3050efe1750a2c26390940949f5f06232a36eb853199a62d19ae38e7ae3944e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.2

Release files / wavewash-0.1.0a1-py3-none-any.whl

Download URL wavewash-0.1.0a1-py3-none-any.whl
Size 254.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
21073086942272e7de24d806242bbc59b41c2ed1429156f5aa73988afcc8ca50
BLAKE2b-256 checksum
How to use checksums
e44d324f2fd799160f0ac073891bc3c667c8d5f6b9f6135b8535c3f230fade0f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

0.1.0a1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page