A browser-based audio tool that separates a mono audio sample (from file or recorded from mic) into:
- Transient (percussive / attack) component
- Tonal (harmonic / sustained) component
- Residual (noise / other) component
All processing runs entirely in the browser via a Web Worker. No audio is ever uploaded to a server.
The application uses Sound Design Toolkit (SDT) SDTDemix module compiled in
WebAssembly to split audio samples into transient, tonal and residual components.
| Layer | Technology |
|---|---|
| Build | Vite 6 |
| UI framework | React 19 + TypeScript |
| Styling | Tailwind CSS v4 |
| Audio processing | Web Worker + TypeScript HPSS |
| WASM | Sound Design Toolkit via Emscripten |
| WAV I/O | Custom encoder/decoder (zero dependencies) |
# Install Emscripten SDK
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.shnpm run wasm:buildThis will:
- Clone the SDT repository into
wasm/SDT/(excluded in .gitignore) - Compile SDT core, its JSON parser dependency plus a custom wrapper
- Output
public/sdt-processor.jsandpublic/sdt-processor.wasm
On next page load the worker detects the WASM module and uses it automatically.
npm run dev # start dev server
npm run build # type-check + production build
npm run preview # preview production build
npm run deploy # publish to github pagesMIT