Pitcher.py
- Free & OS emulation of the SP-12 & SP-1200 signal chain (now with GUI)
- Pitch shift / bitcrush / resample audio files
- Written and tested in Python v3.7.7
- Based on Physical and Behavioral Circuit Modeling of the SP-12 Sampler, DT Yeh, 2007 & Slides
- Audio examples here and here
Installation
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
Usage:
python pitcher.py --input-file ./input.wav --st -4 --output-file ./output.wav
You can now also run a simple gui version using the command:
python pitcher_gui.py
For Mac Users:
python pitcher_gui_mac.py
The releases page also has binary files for the GUI (.exe and .app).
Options:
--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 all output filtering (default and moog), flag
--skip-time-shift - skip time shift inherent to pitching algorithm, flag
--moog-filter - enable Moog LP output filter, emulates SSM2044, flag
If you find this project useful, please consider donating to the NAACP Legal Defense Fund or BLM - TO
TODO:
- enable console window on mac gui too (already defaults to shown in windows gui)
- enable moog filter for gui versions
- combine pitcher_gui.py and pitcher_gui_mac.py
- combine pitcher and pitcher_gui.py
- add all options to GUI
- dedicated 33rpm -> 45rpm pre-processing option, add to GUI
- only use ffmpeg/libav when necessary
- optionally preserve stereo channels throughout processing
- replace librosa if there is a module with better performance, maybe essentia?
- perfect high end input anti aliasing filter fit, likely not very important