1. Use git to clone this repo, or download it as a ZIP using the "Clone or download" button & unzip
2. Open your terminal of choice
3. cd to the new pitcher directory
4. pip install -r ./requirements.txt


python pitcher.py --input-file ./input.wav --st -4 --output-file ./output.wav

you can now also run a simple gui version using

python pitcher_gui.py


--st                 - # semitones to shift pitch by,   		int,    required
--input-file         - path to input file,              		string, required
--output-file        - path to output file,             		string, required
--quantize-bits      - bit rate of quantized output,    		int,    default 12
--time-shift         - custom time shift ratio to apply,		float,  default 0
--skip-quantize      - skip simulation of ADC quantize, 		flag
--skip-normalize     - skip output normalization,       		flag
--skip-input-filter  - skip input anti aliasing filter, 		flag
--skip-output-filter - skip output equalization filter, 		flag
--skip-time-shift    - skip time shift inherent to pitching algorithm,	flag

If you find this project useful, please consider donating to the NAACP Legal Defense Fund or BLM - TO


  • combine pitcher_gui.py and pitcher_gui_mac.py
  • enable console window on mac gui too (already defaults to shown in windows gui)
  • only use ffmpeg/libav when necessary
  • optionally preserve stereo channels throughout processing
  • optional vcf (moog ring) good description in slides
  • replace librosa if there is a module with better performance, maybe essentia?
  • improve high end input anti aliasing filter fit?