{"id":2036947,"url":"https://github.com/Ludwiggle/GRUMIDI","last_synced_at":"2025-04-02T11:30:48.695Z","repository":{"id":218298656,"uuid":"144025568","full_name":"Ludwiggle/GRUMIDI","owner":"Ludwiggle","description":"Recurrent Neural Network for generative MIDI music ","archived":false,"fork":false,"pushed_at":"2018-08-21T11:14:25.000Z","size":9,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-03T09:31:34.089Z","etag":null,"topics":["algorave","electronic-music","gated-recurrent-units","generative-art","generative-music","machine-learning","mathematica","midi","midi-sequencer","music","recurrent-neural-networks","wolfram-language","wolfram-mathematica","wolframlanguage","wolframscript"],"latest_commit_sha":null,"homepage":"","language":"Mathematica","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/Ludwiggle.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":"2018-08-08T14:30:02.000Z","updated_at":"2024-03-20T11:51:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"2d7a2d4e-b3b5-45ff-bfda-d9285e351d6c","html_url":"https://github.com/Ludwiggle/GRUMIDI","commit_stats":null,"previous_names":["ludwiggle/grumidi"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ludwiggle%2FGRUMIDI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ludwiggle%2FGRUMIDI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ludwiggle%2FGRUMIDI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ludwiggle%2FGRUMIDI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ludwiggle","download_url":"https://codeload.github.com/Ludwiggle/GRUMIDI/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246806449,"owners_count":20837101,"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":["algorave","electronic-music","gated-recurrent-units","generative-art","generative-music","machine-learning","mathematica","midi","midi-sequencer","music","recurrent-neural-networks","wolfram-language","wolfram-mathematica","wolframlanguage","wolframscript"],"created_at":"2024-01-21T03:26:57.387Z","updated_at":"2025-04-02T11:30:48.689Z","avatar_url":"https://github.com/Ludwiggle.png","language":"Mathematica","funding_links":[],"categories":["Mathematica"],"sub_categories":[],"readme":"# GRUMIDI\n\nA GRU\u003csup\u003e1\u003c/sup\u003e-based RNN\u003csup\u003e2\u003c/sup\u003e for rhythmic pattern generation.\nThe RNN model is a\n[char-rnn](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)\nthat gets trained on an input MIDI file encoded as a sequence of\n[unit vectors](https://en.wikipedia.org/wiki/Unit_vector)\n\n\n## Prerequisite\n[WolframKernel](https://www.wolfram.com/cdf-player) \n[Wolframscript](https://www.wolfram.com/wolframscript)\n\nRun `$ wolframscript -configure` and set the variable `WOLFRAMSCRIPT_KERNELPATH` to your local `WolframKernel` address\n\n\n## Usage\n\n1. Run `$ wolframscript -f encodeAndTrain.wl`\n\n    Type the input filename\u003csup\u003e5\u003c/sup\u003e `*.mid`\n\n\n\nThe trained net and decoding parameters are saved in `data/`.\n\n\n2. Run `$ wolframscript -f generateAndDecode.wl`\n\n    Generated `*.mid` is saved in `data/`.\n\n\n\n## Discussion\n\nIn general, a MIDI file is not defined on a time-grid; MIDI events might be defined by machine-precision digits.\nThe first script will take care of time-quantization by fitting every MIDI event on a time-grid the resolution of which is equal to the minimum distance between two consecutive events that are found in the input MIDI file.\nThe generated MIDI inherits this time-quantization.\n\nThe dimension of the [unit vectors](http://reference.wolfram.com/language/ref/UnitVector.html) is equal to the number of different \"notes\" found in the input MIDI, e.g. the chromatic scale would be encoded with 12-dimensional unit vectors. Polyphony is encoded by vector addition of simultaneous events.\n\nSimilarly to [LSTMetallica](https://github.com/keunwoochoi/LSTMetallica), the encoded input MIDI is riffled with \"BAR\" every 16 unit vectors for *segmentation of measures*. These \"BAR\" markers are deleted once the nerual net output is decoded to MIDI format.\n\n\n\n--------------------------------\n\n\n\n\u003csup\u003e1\u003c/sup\u003eGated Recurrent Unit\n\n\u003csup\u003e2\u003c/sup\u003eRecurrent Neural Network\n\n\u003csup\u003e3\u003c/sup\u003eMusical Instrument Digital Interface\n\n\u003csup\u003e4\u003c/sup\u003eFull address or local address.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLudwiggle%2FGRUMIDI","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FLudwiggle%2FGRUMIDI","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLudwiggle%2FGRUMIDI/lists"}