{"id":17077083,"url":"https://github.com/insomnimus/midnote","last_synced_at":"2025-04-12T20:22:19.597Z","repository":{"id":57638556,"uuid":"407927691","full_name":"insomnimus/midnote","owner":"insomnimus","description":"A terminal app to display and play notes in a midi file, designed to be accessible.","archived":false,"fork":false,"pushed_at":"2022-05-18T21:18:54.000Z","size":105,"stargazers_count":9,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T19:55:02.219Z","etag":null,"topics":["accessibility","midi","music","rust","terminal"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/insomnimus.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}},"created_at":"2021-09-18T17:42:15.000Z","updated_at":"2025-01-23T19:50:47.000Z","dependencies_parsed_at":"2022-09-26T20:21:29.478Z","dependency_job_id":null,"html_url":"https://github.com/insomnimus/midnote","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insomnimus%2Fmidnote","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insomnimus%2Fmidnote/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insomnimus%2Fmidnote/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insomnimus%2Fmidnote/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/insomnimus","download_url":"https://codeload.github.com/insomnimus/midnote/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248626401,"owners_count":21135655,"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":["accessibility","midi","music","rust","terminal"],"created_at":"2024-10-14T12:12:19.910Z","updated_at":"2025-04-12T20:22:19.570Z","avatar_url":"https://github.com/insomnimus.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MIDNOTE\n\nMidnote is a terminal application that reads a MIDI file\nand displays you its notes bar-by-bar, while playing it.\n\n# Goals\n\nAs a blind musician myself, I found it very difficult to learn new songs on my own.\n\nI've \"seen\" [Lunar Tabs][], and wanted to make something similar but for MIDI files\nsince good guitarpro5 tabs are not free but you can download many great MIDI files.\n\n# Feature Flags\nYou can choose a different audio backend using one of the following feature flags:\n\n-\t`--features=jack`: Use the Jack backend.\n-\t`--features=winrt`: Use the WinRT backend.\n\n# Prerequisites \nMidnote works by reading a MIDI file and parsing the messages within.\nThe display requires no MIDI device (software or hardware) but you need one for the playback.\n \nWindows comes with a default MIDI device, which is pretty lame sounding and laggy.\n[OmniMidi][] is highly recommended for Windows users.\n\nOn *NIX, you'll need to install your own MIDI synthesizer.\nI personally recommend [Fluidsynth][].\n\nOn MacOS, [Fluidsynth][] is available and it should work as good as it works on *NIX systems.\n\n# Build Requirements\nYou need a working [Rust][] installation along with the rust package manager, `cargo` (`cargo` ships with the rust toolchain).\nOn *nix, you also need alsa development libraries:\n```sh\n# debian / ubuntu\napt install libasound2-dev\n# fedora / sentos\ndnf install alsa-lib-devel\n```\n\nIf you want to use the Jack backend, you also need the jack development libraries:\n```sh\n# Debian and derivatives\napt install libjack-jackd2-dev\n# RHEL and derivatives\ndnf install jack-audio-connection-kit-devel\n```\n\n# Installation\n## Windows: With Scoop\nFirst add [my bucket](https://github.com/insomnimus/scoop-bucket) to scoop:\n\n`scoop bucket add insomnia https://github.com/inssomnimus/scoop-bucket`\n\nUpdate scoop:\n\n`scoop update`\n\nInstall the app:\n\n`scoop install midnote`\n\n## Download a pre-built binary\nPre-built binaries can be found on the [releases](https://github.com/insomnimus/midnote/releases) page.\n\n## BYOB: Build Your Own Binary\n```sh\ngit clone https://github.com/insomnimus/midnote\ncd midnote\ngit checkout main\ncargo install --path . --locked\n# To use the jack or winrt backends, do the following:\ncargo install --path . --locked --features=jack # or winrt\n```\n\n# Usage\n\nYou start midnote by giving it a midi file as an argument and optionally, specifying a MIDI device.\n\n```sh\n# Open megalovania.mid, using the default MIDI device:\nmidnote ./megalovania.mid\n\n# Specify another MIDI device:\nmidnote ./megalovania.mid --device 2\n\n# List available MIDI devices:\nmidnote --list\n```\n\nFor more options you can set, please run `midnote --help`.\n\n# Configuration\nMidnote accepts a config file (*.json) with the `--config` command line argument.\nThe default configuration is as follows:\n\n```json\n{\n  \"colors\": true,\n  \"keys\": {\n    \"next\": \"Right\",\n    \"prev\": \"Left\",\n    \"replay\": {\n      \"Char\": \"r\"\n    },\n    \"solo\": {\n      \"Char\": \"s\"\n    },\n    \"silence\": {\n      \"Char\": \" \"\n    },\n    \"rewind\": {\n      \"Char\": \"p\"\n    },\n    \"exit\": \"Esc\",\n    \"help\": {\n      \"Char\": \"h\"\n    }\n  }\n}\n```\n\n## Possible Keys\n\n-\t`Backspace`\n-\t`Enter`\n-\t`Left`\n-\t`Right`\n-\t`Up`\n-\t`Down`\n-\t`Home`\n-\t`End`\n-\t`PageUp`\n-\t`PageDown`\n-\t`Tab`\n-\t`BackTab`\n-\t`Delete`\n-\t`Insert`\n-\t`Esc`\n\nAny letter key is also valid but needs to be wrapped in a `Char` object, see the default config above.\n\nFunction keys have the form `{\"F\": 1..=12 }`.\n\n[Lunar Tabs]: https://github.com/ProjPossibility/Lunar-Tabs-Desktop\n[OmniMidi]: https://github.com/KeppySoftware/OmniMIDI\n[Fluidsynth]: https://github.com/FluidSynth/fluidsynth\n[Rust]: https://github.com/rust-lang/rust\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finsomnimus%2Fmidnote","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finsomnimus%2Fmidnote","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finsomnimus%2Fmidnote/lists"}