{"id":15142168,"url":"https://github.com/todbot/qtpy_synth","last_synced_at":"2025-06-26T12:31:45.274Z","repository":{"id":177080651,"uuid":"659922604","full_name":"todbot/qtpy_synth","owner":"todbot","description":"Hardware \u0026 software for a tiny QTPy-driven synth","archived":false,"fork":false,"pushed_at":"2024-04-28T00:54:44.000Z","size":1687,"stargazers_count":22,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-06-22T04:05:40.183Z","etag":null,"topics":["circuitpython","qtpy","qtpyrp2040","rp2040","synthdiy","synthesizer","synthio"],"latest_commit_sha":null,"homepage":"","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/todbot.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":"2023-06-28T21:32:24.000Z","updated_at":"2025-06-13T17:04:07.000Z","dependencies_parsed_at":"2024-04-26T23:31:22.924Z","dependency_job_id":"3e5c56a0-3633-425a-8c40-87687726f00c","html_url":"https://github.com/todbot/qtpy_synth","commit_stats":null,"previous_names":["todbot/qtpy_synth"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/todbot/qtpy_synth","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/todbot%2Fqtpy_synth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/todbot%2Fqtpy_synth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/todbot%2Fqtpy_synth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/todbot%2Fqtpy_synth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/todbot","download_url":"https://codeload.github.com/todbot/qtpy_synth/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/todbot%2Fqtpy_synth/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262067976,"owners_count":23253704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["circuitpython","qtpy","qtpyrp2040","rp2040","synthdiy","synthesizer","synthio"],"created_at":"2024-09-26T09:24:11.329Z","updated_at":"2025-06-26T12:31:45.252Z","avatar_url":"https://github.com/todbot.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# qtpy_synth\n\nA simple [QTPy RP2040](https://learn.adafruit.com/adafruit-qt-py-2040/overview)-based\nsynth to experiment with [`synthio`](https://github.com/todbot/circuitpython-synthio-tricks).\n\n\u003cimg width=500 src=\"./docs/qtpy_synth_case1.jpg\"\u003e\n\n\u003ca href=\"https://www.tindie.com/stores/todbot/qtpy_synth?ref=offsite_badges\u0026utm_source=sellers_todbot\u0026utm_medium=badges\u0026utm_campaign=badge_small\"\u003e\u003cimg src=\"https://d2ss6ovg47m0r5.cloudfront.net/badges/tindie-smalls.png\" alt=\"I sell on Tindie\" width=\"100\" height=\"26\"\u003e\u003c/a\u003e\n\n### Features\n - Mono audio output circuit, converting PWM to audio, as per [RP2040 design guidelines](https://datasheets.raspberrypi.com/rp2040/hardware-design-with-rp2040.pdf#page=24)\n - Optoisolated MIDI Input via [MIDI TRS-A 3.5mm jack](https://www.perfectcircuit.com/make-noise-0-coast-midi-cable.html)\n - Two pots for controlling parameters\n - One switch for controlling parameters\n - Four capsense touch buttons for synth triggering\n - USB MIDI in/out of course too\n\n### Software\nSome programs written specifically for this board:\n\n- [hwtest](./circuitpython/hwtest/code.py) - test out the hardware with a simple synth\n\n- [simpletouchsynth](./circuitpython/simpletouchsynth) - play with filters using touch sensors. Uses intial cut at a \"qtpy_synth\" hardware library.\n\n- [dronesynth](./circuitpython/dronesynth) - 8-oscillator drone synth\n\n- [wavesynth](./circuitpython/wavesynth) - larger general two-osc synth that can also do wave-mixing and wavetables. Has many rough edges but can sound great!\n  - early video demo:\n  \n    [![Wavetable synth w/ CircuitPython synthio on QTPy RP2040](http://img.youtube.com/vi/4hgDi6MNfsI/0.jpg)](https://www.youtube.com/watch?v=4hgDi6MNfsI)]\n  - another video demo:\n  \n    [![More Wavetable synth w/ CircuitPython synthio on QTPy RP2040](http://img.youtube.com/vi/80yjwxscnnA/0.jpg)](https://www.youtube.com/watch?v=80yjwxscnnA)]\n\n\n#### See also:\n- https://github.com/todbot/circuitpython-synthio-tricks\n  - Contains [many other synthio examples](https://github.com/todbot/circuitpython-synthio-tricks/tree/main/examples) that can work with this synth with minimal changes\n\n### Building it\n\nThe [Tindie version is a partially-assembled PCB](https://www.tindie.com/products/todbot/qtpy_synth/). \u003ca href=\"https://www.tindie.com/stores/todbot/qtpy_synth?ref=offsite_badges\u0026utm_source=sellers_todbot\u0026utm_medium=badges\u0026utm_campaign=badge_small\"\u003e\u003cimg src=\"https://d2ss6ovg47m0r5.cloudfront.net/badges/tindie-smalls.png\" alt=\"I sell on Tindie\" width=\"100\" height=\"26\"\u003e\u003c/a\u003e\n\n\nThe completely assembled SMD sections of the board are:\n\n* audio output circuit\n* TRS MIDI input circuit\n\nThe parts you need to add are:\n\n* [QTPy RP2040](https://www.adafruit.com/product/4900)\n* 0.91\" [I2C OLED display](https://amzn.to/3KDmy73) (w/ pins in Gnd/Vcc/SCL/SDA order)\n* Two 10k potentiometers, 9mm  ([example pots](https://amzn.to/3DYYJm5)) and [knobs](https://amzn.to/3QAkSyR)\n* One tact switch, 6mm ([example switch](https://amzn.to/47nJaSN))\n* Headers and sockets to mount QTPy \u0026 display, to taste\n  * [This male \u0026 female header kit looks pretty good](https://amzn.to/3qqbtiO),\n    as I prefer to put female headers on the PCB and male headers on the QTPy and OLED display.\n    You may need to trim down your headers to be the right size.\n* Feet. I like M2.5 nylon standoffs  (e.g. [M2.5 standoff asst kit](https://amzn.to/45qVjFb))\n  but feel free to do what you like, including making an enclosure!\n* Or [3d-print a simple case](https://www.printables.com/model/757087-case-for-qtpy_synth-circuitpython-synthesizer) for it! I also like these [3d-printed knobs](https://www.thingiverse.com/thing:5759656)\n\n\n\n### Pins used\n\nThe board uses all of the QTPy RP2040 pins:\n\n* `board.A0` - left knob\n* `board.A1` - right knob\n* `board.TX` - middle button\n* `board.RX` - TRS UART MIDI in\n* `board.MOSI` - PWM Audio Out\n* `board.SCL` \u0026 `board.SDA` - I2C bus for OLED display\n* `board.A3`, `board.A2`, `board.MISO`, `board.SCK`,  -- touch pads 1,2,3,4\n\nFor more details see [`hwtest/code.py`](https://github.com/todbot/qtpy_synth/tree/main/circuitpython/hwtest/code.py).\n\n### Schematic\n\n[\u003cimg src=\"./schematics/qtpy_synth_proto2b_sch.png\" width=500\u003e](./schematics/qtpy_synth_proto2b_sch.pdf)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftodbot%2Fqtpy_synth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftodbot%2Fqtpy_synth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftodbot%2Fqtpy_synth/lists"}