{"id":14483197,"url":"https://github.com/jpetazzo/griode","last_synced_at":"2025-08-30T03:33:17.127Z","repository":{"id":52501989,"uuid":"118300644","full_name":"jpetazzo/griode","owner":"jpetazzo","description":"Griode + Novation Launchpad + Raspberry Pi = a music instrument!","archived":false,"fork":false,"pushed_at":"2021-06-09T20:27:15.000Z","size":151,"stargazers_count":157,"open_issues_count":7,"forks_count":19,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-08-25T05:30:55.280Z","etag":null,"topics":["daw","fluidsynth","instrument","launchpad","music","raspberry","raspberry-pi","raspberrypi"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jpetazzo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-01-21T03:18:47.000Z","updated_at":"2025-08-23T21:26:58.000Z","dependencies_parsed_at":"2022-09-16T02:21:57.359Z","dependency_job_id":null,"html_url":"https://github.com/jpetazzo/griode","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/jpetazzo/griode","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpetazzo%2Fgriode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpetazzo%2Fgriode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpetazzo%2Fgriode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpetazzo%2Fgriode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jpetazzo","download_url":"https://codeload.github.com/jpetazzo/griode/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpetazzo%2Fgriode/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272800745,"owners_count":24995138,"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","status":"online","status_checked_at":"2025-08-30T02:00:09.474Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["daw","fluidsynth","instrument","launchpad","music","raspberry","raspberry-pi","raspberrypi"],"created_at":"2024-09-03T00:01:35.824Z","updated_at":"2025-08-30T03:33:16.772Z","avatar_url":"https://github.com/jpetazzo.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Griode\n\nGriode lets you play music using a LaunchPad or a similar controller.\n\nFor short demos and tutorials, check this [YouTube playlist](https://www.youtube.com/playlist?list=PLBAFXs0YjviK9PzKnr3MDsRU6YAJgeH1K).\n\nI gave a few talks about Griode:\n- Berlin Hack\u0026Tell at C-Base (May 2018) [🔗](https://berlinhackandtell.rocks/2018-05-29-no61-revolutionary-may-hacks)\n- Linux Technologies Berlin (July 2018) [🔗](https://www.meetup.com/linux-technologies-berlin/events/252302070/)\n- Python Users Berlin (April 2019) [🔗](https://www.meetup.com/Python-Users-Berlin-PUB/events/258989401/)\n\n[Here are the slides](https://docs.google.com/presentation/d/1G0bdcSyqqoCiD4dK7tq6PZsoMaM_VVexx_n8m4kSYYE/edit#slide=id.p) that I use when presenting Griode.\n\nThis [poster](https://drive.google.com/file/d/16wTihPzhnTIVcAFDvHevtFG-0K0qXPPB)\nexplains how to switch instruments and modes.\nThe original version of the poster was made by Jérôme Petazzoni to\npresent at PyCon in 2019; and it was then much improved\nby [Elodie Trinh](https://twitter.com/mintismycolor) (thanks Elodie!♥).\n\nThere is also a basic (and incomplete) [user manual](MANUAL.md) that\nyou may (or not) find helpful.\n\n\n## Quick start\n\nHere are some quick instructions to get you started, assuming that you\nhave a LaunchPad connected to an Debian/Ubuntu system.\n\n```\ngit clone git://github.com/jpetazzo/griode\ncd griode\nsudo apt-get install python3-pip python3-dev libasound2-dev libjack-dev fluidsynth\npip3 install --user -r requirements.txt\n( cd soundfonts; ./download-soundfonts.sh; )\n./griode.py\n```\n\nYour LaunchPad should light up with a red and white pattern, and pressing\npads should make piano sounds.\n\n\n### Installing on a Raspberry Pi\n\nIf you want to setup Griode on a Raspberry Pi, you can use the\ninstructions above, but **make sure that you run them as the `pi` user.**\n\nYou can use the \"lite\" (text only) or the \"desktop\" version, it\ndoesn't matter for Griode.\n\nIf you want Griode to start automatically when the Pi is powered on,\nsee [this paragraph](#Starting-automatically-on-boot).\n\n\n## Detailed setup instructions\n\nYou need:\n\n- Python 3\n- FluidSynth (to generate sounds)\n- at least one SoundFont (instrument bank used by FluidSynth)\n- a LaunchPad or similar MIDI controller\n\n\n### Installing Python dependencies\n\nOn Debian/Ubuntu systems, you will need the following system packages,\nso that the `python-rtmidi` Python package can be installed correctly:\n\n```bash\napt-get install python3-dev libasound2-dev libjack-dev\n```\n\nYou can then install Griode's requirements with `pip`:\n\n```bash\npip install --user -r requirements.txt\n```\n\nOf course, you are welcome to use `virtualenv` or anything like that\nif you want.\n\nIf you get compilation errors, you might need extra packages (libraries or headers).\n\nNote: if you have problems related to the installation of `python-rtmidi`,\nyou might be tempted to try to install `rtmidi` instead. DO NOT! The two\npackages are slightly incompatible; so after installing `rtmidi`, perhaps\nGriode will start, but you will get another bizarre error at a later point.\n\n\n### Installing FluidSynth\n\nFluidsynth is a software synthesizer. On Debian/Ubuntu systems, you\ncan install it with:\n\n```\napt-get install fluidsynth\n```\n\n\n### Installing SoundFonts\n\nGriode requires at least one \"SoundFont\" so that FluidSynth can make\nsounds. The easiest way to get started is to go to the `soundfonts/`\nsubdirectory, and run the script `download-soundfonts.sh`.\n\nGriode will load SoundFonts called `?.sf2` in alphabetical order.\nThe `download-soundfonts.sh` script will create a symlink `0.sf2`\npointing to the \"GeneralUser GS\" SoundFont, which contains the\n128 instruments of the General MIDI standard, as well as a few\nvariations, and a few drum kits.\n\nYou are welcome to download your own soundfonts, place them in\nthe `soundfonts/` subdirectory, and create symlinks to these files:\nthey will be loaded when you start Griode.\n\n\n#### What are soundfonts?\n\nSoundFonts are instrument banks used by some audio hardware and by FluidSynth\nto generate notes of music. The typical extension for SoundFont files is `.sf2`.\n\nThere are many SoundFonts available out there.\nSome of them are tiny: the Sound Blaster AWE32 (a sound card from the mid-90s)\nhad 512 KB of RAM to load SoundFonts, and there are SoundFonts of that size\nthat offer the 100+ instruments of the General Midi standard! And some\nSoundFonts are huge: I saw some 1 GB SoundFonts out there with just a couple\nof piano instruments in them, but in very high quality (i.e. using different\nsamples for each note and for different velocity levels.)\n\nHere are a few links to some SF2 files:\n- [GeneralUser](http://www.schristiancollins.com/generaluser.php)\n- [Fluid SoundFont](https://packages.debian.org/source/sid/fluid-soundfont)\n- [Soundfonts4U](https://sites.google.com/site/soundfonts4u/)\n- [8bitsf](https://musical-artifacts.com/artifacts/23/8bitsf.SF2)\n- [BASSMIDI](https://kode54.net/bassmididrv/BASSMIDI_Driver_Installation_and_Configuration.htm)\n\n\n### LaunchPad\n\nGriode currently supports the Launchpad Pro, the Launchpad MK2 (aka \"RGB\"),\nand has partial support for the Launchpad S. You can plug multiple\ncontrollers and use them simultaneously.\n\nGriode relies on the name of the MIDI port reported by the `mido` library\nto detect your Launchpad(s). This has been tested on Linux, but the port\nnames might be different on macOS or Windows.\n\n\n## Debugging\n\nYou can set the `LOG_LEVEL` environment variable to any valid `logging`\nlevel, e.g. `DEBUG` or `INFO`:\n\n```\nexport LOG_LEVEL=DEBUG\n./griode.py\n```\n\nNote:\n- `DEBUG` level is (and will always be) very verbose.\n- You can put the log level in lowercase if you want.\n- The default log level is `INFO`.\n\n\n### Persistence\n\nGriode saves all persistent information to the `state/` subdirectory.\nIf you want to reset Griode (or some of its subsystems) to factory defaults,\nyou can wipe out this directory (or some of the files therein).\n\n\n### Starting automatically on boot\n\nIf you are using a Raspberry Pi running the Raspbian distribution,\nand want to automatically start Griode on boot, you can use the provided\nsystemd unit (`griode.service`).\n\nAfter checking out the code in `/home/pi/griode`, and confirming that\nit runs correctly, just run:\n\n```\nsudo systemctl enable /home/pi/griode/griode.service\nsudo systemctl start griode\n```\n\nGriode will start, and it will be automatically restarted when the\nPi reboots.\n\nIf it doesn't start, or if you want to see what's going on:\n\n```\nsudo systemctl status griode\nsudo journalctl -u griode\n```\n\n\n## Bugs\n\n- If you keep a note pressed while switching to another gridget,\n  the note will continue to play. This is almost by design.\n- If you keep a note pressed while stopping recording, it might\n  record a zero-length notes.\n- If a sync is triggered while notes are pressed, it might result\n  in zero-length notes.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjpetazzo%2Fgriode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjpetazzo%2Fgriode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjpetazzo%2Fgriode/lists"}