{"id":16337965,"url":"https://github.com/hall/midi.academy","last_synced_at":"2025-07-29T13:09:11.006Z","repository":{"id":148924528,"uuid":"621078351","full_name":"hall/midi.academy","owner":"hall","description":"Interactive MIDI learning","archived":false,"fork":false,"pushed_at":"2023-06-18T03:41:50.000Z","size":3358,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-11T04:51:04.101Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://midi.academy","language":"TypeScript","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/hall.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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-03-30T00:22:07.000Z","updated_at":"2024-10-18T06:59:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"5be40c43-56c4-44f4-b855-1ad98f793ca3","html_url":"https://github.com/hall/midi.academy","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/hall/midi.academy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hall%2Fmidi.academy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hall%2Fmidi.academy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hall%2Fmidi.academy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hall%2Fmidi.academy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hall","download_url":"https://codeload.github.com/hall/midi.academy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hall%2Fmidi.academy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259960484,"owners_count":22938074,"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":[],"created_at":"2024-10-10T23:48:40.411Z","updated_at":"2025-06-15T10:34:10.473Z","avatar_url":"https://github.com/hall.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# midi.academy\n\nInteractively play along with a MusicXML score using a MIDI instrument.\n\n![screenshot](screenshot.png)\n\nThe core features are\n\n - **visual hints**: the onscreen keyboard highlights which notes should currently be performed\n - **follows you**: playback will not continue until the correct notes are performed\n - **audio feedback**: when an incorrect note is performed, output will use the harpsichord sound bank\n\nSome additional functionality includes:\n\n- start and end measures\n- repetition count\n- tempo selection\n- left and right hand toggles\n- page zoom\n- background color theming\n\n\n## lighted keys\n\nThere is support for sending data over a serial port (e.g., USB).\nThis can be used to light an LED strip above the physical keyboard, replacing the functionality of the onscreen keyboard.\n\nThe API conforms to the following interface\n\n- 0-87: toggle respective note\n- 88: reset (i.e., turn off all notes)\n\nEach command is terminated with a newline character (`\\n`).\n\n### example\n\nThere's a lot a leeway here but, as a concrete example, the author uses/recommends the following setup:\n\n```\ncomputer -usb-\u003e microcontroller -wires-\u003e LEDs\n```\n\nThe main advantage here is that data and power share this single chain.\n\nSpecifically,\n\n- a 60 LED/meter WS8212 strip (~4 meters worth)\n\n  \u003e **NOTE**: this requires putting slight folds in the strip between LEDs to match the keyboard spacing\n\n- a NodeMCU microcontroller (flashed with ESPHome; see [my config](https://gitlab.com/hall/hall/-/blob/25ca6f24ce4ebda511110a3dbfb01665a5a79d46/cluster/esphome/livingroom.nix#L35-69) for inspiration)\n\n- connect the wires from the LED strip to the microcontroller\n\n  - red -\u003e VIN (for 5v power)\n  - white -\u003e GND (ground)\n  - green -\u003e GPIO12 (data)\n\n- select \"Connect\" in the sidebar and choose your device\n\n## attribution\n\nThis project was initially forked from https://github.com/rvilarl/pianoplay.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhall%2Fmidi.academy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhall%2Fmidi.academy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhall%2Fmidi.academy/lists"}