{"id":16617038,"url":"https://github.com/marchersimon/tinymid","last_synced_at":"2026-04-19T18:31:39.420Z","repository":{"id":48796365,"uuid":"378218745","full_name":"marchersimon/tinymid","owner":"marchersimon","description":"A lightweight command-line MIDI file viewer","archived":false,"fork":false,"pushed_at":"2025-04-29T18:47:41.000Z","size":151,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-29T19:46:10.532Z","etag":null,"topics":["command-line","midi"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marchersimon.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-06-18T17:13:37.000Z","updated_at":"2025-04-29T18:47:44.000Z","dependencies_parsed_at":"2022-09-23T20:51:07.741Z","dependency_job_id":null,"html_url":"https://github.com/marchersimon/tinymid","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/marchersimon/tinymid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marchersimon%2Ftinymid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marchersimon%2Ftinymid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marchersimon%2Ftinymid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marchersimon%2Ftinymid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marchersimon","download_url":"https://codeload.github.com/marchersimon/tinymid/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marchersimon%2Ftinymid/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32017818,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"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":["command-line","midi"],"created_at":"2024-10-12T02:15:02.786Z","updated_at":"2026-04-19T18:31:39.411Z","avatar_url":"https://github.com/marchersimon.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# What is `tinymid`?\n\n`tinymid` is a command-line tool for simplifying MIDI files. It was originally developed to create simple-to-parse MIDI files for a microcontroller-based tesla coil interrupter, but can be used in any case, where a lightweight and minimalistic MIDI implenentation is needed.\n\nFiles with \"single track file format\" or \"multiple song file format\" aren't supported yet, but almost all music writing software (like Musescore) and therefore most MIDI files on the internet use the \"multiple track file format\" by default, which is supported.\n\nThe tool parses the original file and simplifies it by\n* merging all tracks into a single one,\n* moving all events to Channel 0,\n* turning `NOTE_ON` events with a velocity of 0 into `NOTE_OFF` events, and\n* removing all events (including meta and sysex events), except `NOTE_ON`, `NOTE_OFF`, `SET_TEMPO` and `END_OF_TRACK`.\n\nWith the `debug` and `dryrun` option, this tool can also be used to analyse MIDI files and show their contents.\n\nBig thanks to Ichiro Fujinaga, who wrote a very detailed explanation of the MIDI file format ([https://www.music.mcgill.ca/~ich/classes/mumt306/StandardMIDIfileformat.html](https://www.music.mcgill.ca/~ich/classes/mumt306/StandardMIDIfileformat.html)).\n\n## Usage\n\n```\nUsage: ./tinymid [options] \u003cfile\u003e\nOptions:\n  -d, --debug         Enable debug logging and print MIDI events\n  -n, --no-color      Disable colored output\n  -o, --output        Specify the name for the output file (defaults to \"out.mid\")\n  -r, --dryrun        Don't write anything to a file. Used for debugging purposes\n  -h, --help          Print this help message\n```\n\n## Example\n\nUsing the debug option to analyze a file can look like this:\n\n```\nFile format 1: Multiple track file format\n\nTrack 1:\n\n  Pos  |           Raw Event Source             |  AbsT  |  RelT  |        Event Type         |  Channel   |    Event Details\n0x16   | 00 FF 03 05 50 69 61 6E 6F             | 0      | 0      | Sequence or track name    |            | Piano\n0x1F   | 00 FF 58 04 03 02 18 08                | 0      | 0      | Time signature            |            | \n0x27   | 00 FF 59 02 00 00                      | 0      | 0      | Key signature             |            | \n0x2D   | 00 FF 51 03 0F 42 40                   | 0      | 0      | Tempo setting             |            | 1 seconds per quarter note\n0x34   | 00 B0 79 00                            | 0      | 0      | Control change            | Channel 0  | \n0x54   | 00 5D 00                               | 0      | 0      | Control change            | Channel 0  | \n0x5C   | 00 90 4C 50                            | 0      | 0      | Note on                   | Channel 0  | Note E5  at velocity 80\n0x60   | 00 B1 79 00                            | 0      | 0      | Control change            | Channel 1  | \n0x88   | 83 5F 90 4C 00                         | 479    | 479    | Note on                   | Channel 0  | Note E5  at velocity 0\n0x8D   | 01 45 50                               | 480    | 1      | Note on                   | Channel 0  | Note A4  at velocity 80\n0x90   | 81 6F 45 00                            | 719    | 239    | Note on                   | Channel 0  | Note A4  at velocity 0\n0xA5   | 81 6F 4C 00                            | 1439   | 239    | Note on                   | Channel 0  | Note E5  at velocity 0\n0xA9   | 01 45 50                               | 1440   | 1      | Note on                   | Channel 0  | Note A4  at velocity 80\n0xAC   | 83 5F 45 00                            | 1919   | 479    | Note on                   | Channel 0  | Note A4  at velocity 0\n0xB0   | 01 4C 50                               | 1920   | 1      | Note on                   | Channel 0  | Note E5  at velocity 80\n0xB3   | 81 6F 4C 00                            | 2159   | 239    | Note on                   | Channel 0  | Note E5  at velocity 0\n0xB7   | 01 4A 50                               | 2160   | 1      | Note on                   | Channel 0  | Note D5  at velocity 80\n0xBA   | 81 6F 4A 00                            | 2399   | 239    | Note on                   | Channel 0  | Note D5  at velocity 0\n...\n```\n\n`Pos` is the event's starting position in the file, `AbsT` is the absolute time and `RelT` is the relative time (delta time).\n\n## Build\n\nThe tool can be built by running `make` or `make debug` for a debuggable executable. The only requirements should be `make` itself and the `g++` compiler (C++17 or later). So far, the tool has only been tested on Linux.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarchersimon%2Ftinymid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarchersimon%2Ftinymid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarchersimon%2Ftinymid/lists"}