{"id":16991047,"url":"https://github.com/gin66/midi2ly","last_synced_at":"2025-06-16T00:05:52.412Z","repository":{"id":95757354,"uuid":"58929944","full_name":"gin66/midi2ly","owner":"gin66","description":"MIDI to Lilypond converter","archived":false,"fork":false,"pushed_at":"2025-02-14T23:24:18.000Z","size":64,"stargazers_count":35,"open_issues_count":0,"forks_count":3,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-04T17:35:52.775Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/gin66.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-05-16T12:16:12.000Z","updated_at":"2025-02-14T23:24:21.000Z","dependencies_parsed_at":"2023-05-21T22:45:31.318Z","dependency_job_id":null,"html_url":"https://github.com/gin66/midi2ly","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gin66/midi2ly","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gin66%2Fmidi2ly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gin66%2Fmidi2ly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gin66%2Fmidi2ly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gin66%2Fmidi2ly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gin66","download_url":"https://codeload.github.com/gin66/midi2ly/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gin66%2Fmidi2ly/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260072486,"owners_count":22954910,"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-14T03:24:41.781Z","updated_at":"2025-06-16T00:05:52.061Z","avatar_url":"https://github.com/gin66.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"MIDI2LY\n-------\n\nA MIDI to Lilypond converter with these features:\n\n    - Let's you select tracks and lyrics to be embedded\n    - Automatic selection of piano tracks to bass/treble (no left/right split though)\n    - Automatic key detection\n    - Automatic detection of repeats based on identical (!) bars\n    - Repeats will fold lyrics along the bar\n    - Notes are adjusted (rounded) to 1/32 boundaries\n\nBackground:\n-----------\nIn order to compile the scores for the band of my son, I have bought Logic Pro X. Nice tool, but making short scores using repeats is just a nightmare. Typical workflow is:\n\n    1. Get the song ready in Logic primarily for Piano.\n    2. Then create two more tracks for the printout\n    3. In these new scores all loops are removed and repeats are type set manually.\n\nThe bad thing is:\n\n    * If you print the long track, those repeat signs are disturbing\n    * You cannot listen to the song with the repeats set.\n    * Hell of manual work\n    * And now imagine you want to add lyrics somehow....\n\nSo I have looked around for a solution. For music typesetting lilypond is great, so I \"just\" need to convert the Logic Pro music to lilypond format.\nThere is a nice tool musicxml2ly and Logic Pro X can export MusicXML format. So I have given it a try and it has failed miserably.\nAfter some time looking around and looking at the MusicXML format, I have come to the conclusion of this being a dead end.\nNext try has been with midi. The converter - I have found for midi to lilypond - haven't worked so well either.\nNot to mention automatic repeats detection. As I have come across python-midi and I like python programming, I have decided to write my own converter.\n\nHere it is.\n\nUsage:\n------\nPlease try for the latest usage:\n\n    ./midi2ly.py -h\n\nIn case you have Logic Pro X, then follow these steps:\n\n    1. Duplicate those tracks you want to export (assume you have used Alias+Loops)\n    2. Copy whole content of the original tracks\n    3. Select the new tracks and press 'J' in order to convert Alias+Loops into one region per track\n    4. Export as MIDI with Alt+Apple+E\n    5. Run midi2ly.py and lilypond =\u003e Done\n\nExample:\n--------\n\nI have one midifile called \"Randy Newman - When I am Gone.mid\".\nThe embedded tracks can be listed with:\n\n    ./midi2ly.py -l Randy\\ Newman\\ -\\ When\\ I\\ am\\ Gone.mid \u003eRN.ly\n\nAnd the output is:\n\n    1 : Track(None,None)\n    2 : Track(Voice,Orchestra Oboe) with 184 lyric events\n    3 : Track(Intro,R)\n    4 : Track(Intro,L)\n\nThe first track is the meta track. For print out of the piano score with embedded lyrics the invocation would be:\n\n    ./midi2ly.py -L 2 -P 3,4 Randy\\ Newman\\ -\\ When\\ I\\ am\\ Gone.mid \u003eRN.ly\n\nAnd then for type setting + midi output with repeats expanded just do:\n\n    lilypond RN.ly\n\nThis will create:\n\n    RN.pdf      ... the scores\n    RN-1.mid    ... with repeats unfolded\n\nDocker:\n-------\n\nIn case you lack python v3, then you can use a docker container. Either use the official one:\n\n    docker pull gin66/midi2ly\n\nOr create it locally with:\n\n    docker build -t midi2ly .\n\nAnd run it with\n\n    docker run -it --rm -v \"`pwd`\":/in midi2ly -L 2 -P 3,4 Randy\\ Newman\\ -\\ When\\ I\\ am\\ Gone.mid \u003eRN.ly\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgin66%2Fmidi2ly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgin66%2Fmidi2ly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgin66%2Fmidi2ly/lists"}