Tape Saturator is a Vite/React Web Audio app for exploring physically modeled tape coloration in the browser. It combines machine presets, stage-level controls, real-time metering, and offline rendering in a single interface.
- Real-time tape processing with an
AudioWorklet - Machine presets modeled after
Studer A810,Ampex ATR-102, andMCI JH-24 - Two control surfaces: a compact macro view and a graph-based signal-flow view
- Transport controls, input/output metering, and stage-level inspection
- Offline
16xrender that downloads a processed WAV file
- Node.js
18+ - npm
- A modern browser with Web Audio and
AudioWorkletsupport
Install dependencies:
npm installStart the dev server:
npm run devCreate a production build:
npm run buildRun the test suite:
npm test- Load an audio file with the
Load Audiobutton or drag and drop it into the app. - Switch between
Compact ViewandGraph Viewdepending on whether you want macro controls or stage-by-stage inspection. - Tweak tape speed, formula, bias, saturation, transformer drive, transport behavior, and related parameters while audio is playing.
- Click
Processto run an offline16xrender and download the processed file as WAV.
The repo includes a GitHub Actions workflow at /.github/workflows/deploy-pages.yml that:
- runs on pushes to
main - builds the app with the correct Pages base path
- uploads
dist - deploys to GitHub Pages
To enable it:
- Open the repository settings on GitHub.
- Go to
Pages. - Set the source to
GitHub Actions. - Push to
mainor run the workflow manually.
With the current origin remote (af80a/tape-js), the default Pages URL should be https://af80a.github.io/tape-js/.
- The app uses
Vitefor bundling andVitestfor tests. - The production build emits the worklet bundle at
dist/worklets/tape-processor.js. - Additional DSP calibration notes live in
docs/spec-fit.md.