{"id":47099869,"url":"https://github.com/mwcm/pitcher","last_synced_at":"2026-03-12T15:12:55.310Z","repository":{"id":37647432,"uuid":"267470393","full_name":"mwcm/pitcher","owner":"mwcm","description":"audio pitch-shifting \u0026 re-sampling utility, based on the EMU SP-1200","archived":false,"fork":false,"pushed_at":"2024-08-27T21:42:38.000Z","size":11864,"stargazers_count":27,"open_issues_count":0,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-08-27T23:18:58.772Z","etag":null,"topics":["music","numpy","python","sampling","scipy"],"latest_commit_sha":null,"homepage":"https://soundcloud.com/user-320158268/sets/pitcher-examples","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mwcm.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-28T02:05:29.000Z","updated_at":"2024-08-27T21:42:41.000Z","dependencies_parsed_at":"2023-02-18T22:01:00.777Z","dependency_job_id":null,"html_url":"https://github.com/mwcm/pitcher","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/mwcm/pitcher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwcm%2Fpitcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwcm%2Fpitcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwcm%2Fpitcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwcm%2Fpitcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mwcm","download_url":"https://codeload.github.com/mwcm/pitcher/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwcm%2Fpitcher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30429658,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T14:34:45.044Z","status":"ssl_error","status_checked_at":"2026-03-12T14:09:33.793Z","response_time":114,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["music","numpy","python","sampling","scipy"],"created_at":"2026-03-12T15:12:54.818Z","updated_at":"2026-03-12T15:12:55.304Z","avatar_url":"https://github.com/mwcm.png","language":"Python","readme":"# Pitcher.py\n\n\u003cimg width=\"712\" alt=\"Screen Shot 2022-11-14 at 8 09 32 PM\" src=\"https://user-images.githubusercontent.com/2433319/201812501-af784d53-5a6d-4c94-af5d-1ffb2fc8cb11.png\"\u003e\n\n\n- Free \u0026 OS emulation of the SP-12 \u0026 SP-1200 signal chain (now with GUI)\n- Pitch shift / bitcrush / resample audio files\n- Written and tested in Python v3.10.7 on Windows 10 \u0026 MacOS Mojave 10.14.6\n- Based on [Physical and Behavioral Circuit Modeling of the SP-12\nSampler, DT Yeh, 2007](https://ccrma.stanford.edu/~dtyeh/papers/yeh07_icmc_sp12.pdf) \u0026 [Slides](https://ccrma.stanford.edu/~dtyeh/sp12/yeh2007icmcsp12slides.pdf)\n- Audio examples [here](https://soundcloud.com/user-320158268/sets/pitcher-examples) and [here](https://tinyurl.com/yckcmhb2)\n\n### Installation\n```\n1. Use git to clone this repo, or download it as a ZIP using the \"Clone or download\" button \u0026 unzip\n2. Open your terminal of choice\n3. cd to the new pitcher directory\n4. pip install -r ./requirements.txt\n```\n\n### Usage:\n```\npython pitcher_cli.py --input-file ./input.wav --st -4 --output-file ./output.wav\n```\n\nYou can now also run a simple gui version using the command:\n\n```python pitcher_gui.py```\n\n\nThe [releases page](https://github.com/mwcm/pitcher/releases/tag/0.5.2) also has binary files for the GUI (.exe and .app).\n\n\n### Options:\n\n```\n--st                        - number of semitones to shift pitch by,                 int,    required\n--input-file                - path to input audio file (WAV, MP3, OGG, FLAC),        string, required\n--output-file               - path to output audio file,                             string, required\n--log-level                 - logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL), string, default 'INFO'\n--no-input-filter           - skip input anti-aliasing filter,                       flag,   default False\n--no-quantize               - skip ADC quantization simulation,                      flag,   default False\n--no-time-stretch           - disable time stretching,                               flag,   default False\n--no-output-filter          - skip output EQ filtering                               flag,   default False\n--normalize-output          - normalize output audio,                                flag,   default False\n--quantize-bits             - bit depth for quantization simulation,                 int,    default 12\n--custom-time-stretch       - time stretch factor (1.0=device default, 0.0=none),    float,  default 1.0\n--output-filter-type        - output filter: lp1 (7.5kHz), lp2 (10kHz), moog,        str,    default 'lp1'\n--moog-output-filter-cutoff - cutoff frequency for moog filter in Hz (20-20000),     int,    default 10000\n--force-mono                - convert input to mono (output will also be mono),      flag,   default False\n--use-sp12-rate             - use SP-12 SR (27500 Hz) instead of SP-1200 (26040 Hz), flag,   default False\n```\n\n### Usage Examples:\n\n```bash\n# Basic pitch shifting\npython pitcher_cli.py --input-file input.wav --output-file output.wav --st -4\n\n# Disable specific processing steps\npython pitcher_cli.py --input-file input.wav --output-file output.wav --st 2 --no-quantize --no-output-filter\n\n# Use moog filter with custom cutoff\npython pitcher_cli.py --input-file input.wav --output-file output.wav --st 0 --output-filter-type moog --moog-output-filter-cutoff 5000\n\n# Minimal processing (bypass most effects)\npython pitcher_cli.py --input-file input.wav --output-file output.wav --st -1 --no-input-filter --no-time-stretch --no-output-filter\n```\n\nIf you find this project useful, please consider donating to the [NAACP Legal Defense Fund](https://engage.naacpldf.org/dBCvDTd9IEiXX_jPkmkT_w2) or [BLM CA](https://www.blacklivesmatter.ca/)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmwcm%2Fpitcher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmwcm%2Fpitcher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmwcm%2Fpitcher/lists"}