A vocal pitch correction web application (like Autotune): https://alexcrist.github.io/autotone/
This project works using CREPE's pitch detection model and Stephan Bernsee's approach to Fourier-transform based pitch shifting:
- CREPE: A Convolutional REpresentation for Pitch Estimation -- pre-trained model (ICASSP 2018)
- Pitch Shifting Using The Fourier Transform by Stephan Bernsee
To perform vocal pitch correction, the input audio goes through two stages: pitch detection and pitch shifting.
To detect pitches, one of CREPE's pre-trained models is run using TensorFlowJS. To pitch shift, WebAssembly is used to run a C library that performs Fourier-based pitch shifting according to Stephan Bernsee's blog post above. Additionally, the audio processing algorithms are run in the background on web workers to prevent the browser from becoming unresponsive.
- Node v14.18.2
- NPM v6.14.15
- Emscripten v3.1.29
- Clone this repo
- Init the
crepe
submodule withgit submodule init
- Build the C pitch-shifting library to WebAssembly by entering the
tuner
directory and runningmake
- Install the web dependencies by entering the
react
directory and runningnpm install
- Start the development server by entering the
react
directory and runningnpm start
- View the app at
http://localhost:8080
Deploy the app to GitHub Pages using scripts/deploy.sh
- TensorFlow.js
- WebAssembly (Emscripten)
- Web audio API
- Web workers
- React
- Webpack
- Allow user to set pitch detection over-sampling factor
- This will involve moving audio window/buffer building logic out of BufferNode/Processor and into Autotoner
- Allow user to upload audio (instead of just microphone)
- Implement high quality audio resampler
- Allow stereo (currently just mono)
- Add more types of scales
- Allow user to pitch correct according to a separate target audio or MIDI input