{"id":15142148,"url":"https://github.com/deckerego/macropad_4chord_midi","last_synced_at":"2025-10-23T19:31:13.036Z","repository":{"id":42672621,"uuid":"411073365","full_name":"deckerego/Macropad_4chord_MIDI","owner":"deckerego","description":"A take on the 4chord MIDI project with the Adafruit Macropad","archived":false,"fork":false,"pushed_at":"2023-05-27T11:21:08.000Z","size":3928,"stargazers_count":45,"open_issues_count":1,"forks_count":4,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-10-09T22:41:39.660Z","etag":null,"topics":["adafruit","circuitpython","macropad","midi","midi-controller","music-player","music-theory","neopixel","rp2040"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deckerego.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}},"created_at":"2021-09-27T23:32:32.000Z","updated_at":"2024-09-25T20:13:15.000Z","dependencies_parsed_at":"2024-01-06T09:54:25.555Z","dependency_job_id":"e536d285-90bc-4e57-b75b-638078ea91a7","html_url":"https://github.com/deckerego/Macropad_4chord_MIDI","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deckerego%2FMacropad_4chord_MIDI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deckerego%2FMacropad_4chord_MIDI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deckerego%2FMacropad_4chord_MIDI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deckerego%2FMacropad_4chord_MIDI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deckerego","download_url":"https://codeload.github.com/deckerego/Macropad_4chord_MIDI/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219867955,"owners_count":16555810,"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":["adafruit","circuitpython","macropad","midi","midi-controller","music-player","music-theory","neopixel","rp2040"],"created_at":"2024-09-26T09:23:41.931Z","updated_at":"2025-10-23T19:31:13.018Z","avatar_url":"https://github.com/deckerego.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Macropad 4chord MIDI\n\n[![Macropad 4chord MIDI](https://github.com/deckerego/Macropad_4chord_MIDI/actions/workflows/pullrequest-unittest.yml/badge.svg)](https://github.com/deckerego/Macropad_4chord_MIDI/actions/workflows/pullrequest-unittest.yml)\n\n## Contents\n\n* **[About the Macropad 4chord MIDI](#about)**\n* **[Playing Harmonies, Melodies, and Rhythms](#playing)**\n* **[Installing on an Adafruit Macropad](#installing)**\n* **[Updating an Existing Installation](#updating)**\n* **[How to configure progressions, drum kits, MIDI settings](#configuring)**\n* **[Building \u0026 Testing This Project](#building)**\n\n## About\n\n\u003e \"All the greatest hits from the past forty years just use four chords. Same four chords for every song. It's dead simple to write a pop hit.\"\n -- Benny, Axis of Awesome\n\nA four-chord MIDI device that allows you to rapidly churn out catchy tunes.\nSet your root key \u0026 chord progression, then off you go. Includes drum pads\nso you can provide a backing beat to your tracks.\n\nHuge thanks to so many who have inspired this idea, especially:\n- [Sven Gregori](https://github.com/sgreg) and his [4 Chord USB MIDI Keyboard](https://hackaday.io/project/26078-4chord-midi)\n- Paul David's [The Four Chord Song](https://youtu.be/6U8-Y7DEzOE) music theory video\n- [iSongs' Take On Me with iOS' GarageBand](https://youtu.be/U3aiBukp_E4)\n- The [Omnichord System Two](https://suzukimusic-global.com/products_single.php?parent_cate_cd=3\u0026products_cate_cd=34\u0026products_cd=315)\n- The [Yamaha QY20](https://soundprogramming.net/sequencers/yamaha/yamaha-qy20/)\n- Roland's [TR-808, TB-303, and SH-101](https://roland50.studio/)\n- ...and of course [Axis of Awesome's Four Chord Song](https://youtu.be/5pidokakU4I)\n\nWould you like to learn more about music theory and music composition? May I recommend:\n- Andrew Huang's [learn music theory in half an hour](https://youtu.be/rgaTLrZGlk0) video\n- Nice Stick's [Bon! Music](https://nicestick.io/) beginner guide to music composition\n- [ArcAttach](https://youtu.be/d2OsF86fcKQ) and their [StringTheory project](https://arcattack.com/stringtheory/)\n- Goodhertz' [Funklet](https://goodhertz.com/funklet/)\n- Mike Hadlow's [Guitar Dashboard](https://guitardashboard.com/)\n\n\n## Playing\n\nThe Macropad 4chord MIDI is built to play simple chord progressions, follow scales to build\nmelodies, and act as a drum kit as a MIDI device. You can connect the Macropad to any studio \nrecording software or DAW accepts MIDI devices, such as GarageBand or Abelton Live.\n\nThe 4chord MIDI has five different modes: a \"harmony\" mode that allows you to select \nprogressions and root keys to play chords, the \"autochord\" mode that lets you play an\nentire chord with a single key (like the sequencers of the 80's and 90's), a \"melody\" \nmode that highlights different scales you can play, a \"rhythm\" mode that\nallows you to use the MacroPad as an acoustic drum / electric drum /\npercussion pad, and the \"MIDI controls\" mode that lets you set MIDI command\ncontrols (including note velocity). You can switch between each mode by\nclicking on the rotary dial.\n\nThere are a few quick demos showing how to use the MacroPad 4chord MIDI in a DAW:\n* GarageBand: https://youtu.be/goyia2EYv0Q\n* Renoise: https://youtu.be/5VwU2DpjD-4\n* Zenbeats Mobile: https://youtu.be/n5oL5MZPpwQ\n* Hookpad: https://youtu.be/Ifc-n-RV3Ag\n\n![Switching between triad, autochord, melody, drum pad, and MIDI settings modes](./docs/images/modes.gif)\n\n### Chord Keyboard (Triad Mode)\n\nOnce you power on the Macropad a default progression is loaded into \"Triad Mode\", \nwith the root on middle C (I'm a assuming middle C is on the third octave). \nThe root note is at the top left, with the major (or minor) third and \nperfect fifth on the middle and right keys. The key and octave can be changed \nby rotating the encoder dial, going up or down the chromatic scale.\n\nAs you go down the keypad, the notes follow the four chord progression listed\non the screen. By default this is a I-V-vi-IV progression, so with the root\nat C3 you will have G3, A3, and F3 as you go down the keypad. You can rotate\nthrough some four chord progressions by pressing down on the encoder button\nwhile rotating the dial.\n\nThanks to the RP2040, all the keys can be pressed simultaneously. You can\nplay the triad chords for each degree, or arpeggiate the chords however\nyou like. The list of notes currently being played are displayed on screen\nif you want to check my math.\n\nYou can bend the current notes being played by rotating the dial while keys\nare being held down. Rotating counter-clockwise will bend the pitch down,\nrotating clockwise will bend the pitch up.\n\n### AutoChord Mode\n\nClicking once on the rotary dial after the Macropad boots loads the\n\"AutoChord\" mode. In this mode each button does **not** correspond to\na note, instead each button corresponds to a _chord_.\n\nThis mode does load a chord progression just as the previous \"Triad Mode\"\ndoes, however each combination of keys you press in a row corresponds to a\ndifferent type of cord. The map is:\n\n| Key 1 | Key 2 | Key 3 | Chord Type         |\n|-------|-------|-------|--------------------|\n| Press |       |       | Major Chord        |\n|       | Press |       | Minor Chord        |\n|       |       | Press | Dominant 7th Chord |\n| Press |       | Press | Major 7th Chord    |\n|       | Press | Press | Minor 7th Chord    |\n| Press | Press |       | Diminshed Chord    |\n| Press | Press | Press | Augmented Chord    |\n\nEach chord also has an accompanying bass chord, where the 1st\nand 5th one octave lower are played alongside the chord. This can be\nconfigured to be just the root, or the 3rd, or disabled entirely \nin `settings.py`.\n\nAutoChord mode also allows you to arpeggiate chords, so that there is a\nslight delay between each note as it is played. This works well with\nguitar voices, since it provides a more realistic strum-like effect. This\ncan be configured within the [MIDI Controls](#midi-controls) configuration\nscreen, and defaults can be configured within `settings.py`.\n\n### Highlight Scales (Melody Mode)\n\nClicking again on the rotary dial brings up a keyboard where a selected\nscale is highlighted on the keypad so you can type out a melody.\nEach of the 12 buttons on the Macropad will correspond to a note on the \nchromatic scale, with the root note you have selected in the top left. \n\nThe buttons that are illuminated correspond to the scale selected while\nin this mode. You can play as many notes as you wish simultaneously,\nhowever only the highlighted notes are part of the selected scale.\nTo change to a different scale (pentatonic major, relative minor, \nblues major, etc.) press down on the encoder button and rotate the dial.\nThe name and first seven notes of the scale will be shown on the display.\n\nJust as when playing chord progressions, you can bend the current notes \nbeing played by rotating the dial while keys are being held down. \nRotating counter-clockwise will bend the pitch down, rotating clockwise \nwill bend the pitch up.\n\n### Drum Pads\n\nIf you click three times on the rotary dial after the Macropad boots, it will move\ninto the drum pad mode. Rotating the dial will allow you to select from\na number of drum or percussion presets where MIDI notes match an acoustic drum,\na rhythm composer (such as the classic TR-808), or percussion strikes.\nActual percussion sounds depend on the MIDI controller or DAW you are using,\nso you may need to make some [configuration tweaks](#configuring)\nwith the MIDI mapping to match what instrument you want to use.\n\n### MIDI Controls\n\nClicking four times after booting the Macropad will take you into the MIDI controls\nmode, where you can adjust MIDI controls that are transferred to your DAW\nwhen recording. This includes global settings (such as attack or release time)\nas well as note settings (such as velocity). The AutoChord setting that\nallows you to arpeggiate a chord is also listed here.\n\nBear in mind that not all DAWs will register MIDI commands from devices in the\nsame way. Some DAWs register the commands so long as your device is connected,\nothers will not register any commands until you begin recording. If you find\nthat your DAW isn't picking up the values you set, start recording while the\n\"MIDI Controls\" mode is showing on the Macropad, then single-click to return\nto the chords mode immediately after. This will re-send all the MIDI commands\nto your DAW.\n\n\n## Installing\n\nFirst make sure that your Macropad has the\n[latest version of CircuitPython 9.x installed](https://circuitpython.org/board/adafruit_macropad_rp2040/).\nSee [https://learn.adafruit.com/adafruit-macropad-rp2040/circuitpython](https://learn.adafruit.com/adafruit-macropad-rp2040/circuitpython)\nfor instructions on how to update the Macropad to have the latest version of\nCircuitPython.\n\nWhen installing the Macropad 4chord for the first time, extract the latest\n[MacroPad 4chord MIDI.zip](https://github.com/deckerego/Macropad_4chord_MIDI/releases/latest)\ninto a directory, then copy the contents of that extracted archive\ninto the CIRCUITPY drive that appears when you plug in your Macropad.\nEnsure that the contents of the `lib/` subdirectory are also copied - these are\nthe precompiled Adafruit libraries that power the Macropad.\n\n\n## Updating\n\nAfter you first install this version of Macropad 4chord MIDI and reboot,\nthe Macropad will no longer mount as a removable drive. This ensures that \nWindows and MacOS won't complain if you unplug or reboot the device, \nmaking it behave more like pure MIDI device. This also helps mobile devices\nas well, as sometimes Android can't tell if the Macropad 4chord MIDI is\na input device, a flash drive, or a MIDI keyboard.\n\nTo update or edit the code on the device, or to modify the settings, you first\nneed to reboot the device with the Macropad's drive mounted in read/write mode.\nTo do that, reboot the device using the boot switch on the left of the\nMacropad, and then after releasing the button immediately hold down the\nrotary encoder button. You should see the text \"Enabling Updates\" quickly\nappear on the screen, and then a removable drive will mount in read/write mode\nthat contains some documentation and the Macropad's CircuitPython code.\n\n## Configuring\n\nThe `settings.py` file has several settings you can tweak, including\nMIDI note configurations, MIDI channel settings, and a list of the progressions \nyou can scroll through. If you would like to add your own chord progressions or \nwould like to keep a shorter list of possible keys, you can make those changes \nin the `settings.py` file within the CIRCUITPY drive. Just make sure to mount \nyour Macropad in read/write mode (see [Updating](#updating)).\n\n\n## Building\n\nThere is no build process since the Python files are distributed in\n.py form and are not compiled to Micropython. All files are packaged as-is.\n\n### Packaging\n\nThe necessary Adafruit CircuitPython libraries are provided in the\nreleases package but not included in the Git repository for obvious reasons.\nIf you are installing from this repo directly, review\n[lib/README.md](./lib/README.md) for details on how to add the\nnecessary libraries.\n\n### Unit Testing\n\nUnit testing can be run with:\n\n    python3 -m unittest discover\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeckerego%2Fmacropad_4chord_midi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeckerego%2Fmacropad_4chord_midi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeckerego%2Fmacropad_4chord_midi/lists"}