Skip to content

gitxandert/mlx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

This is a machine-learning and notation application created by Alexander Toth with Max 9. It utilizes the ml.star library to machine-learn MIDI and .musicxml data and the bach library to notate music generated from this learned data. Users can read .midi and .musicxml files, play directly into [ml.markov] objects with MIDI devices, edit and shape data learned from these files/playing, and export generated scores, MIDI files, PNGs, etc., to other software for further creative editing.

To download this application, click on the latest release under Releases (should be to the right) and click on the mlx.zip file. After downloading, unzip this file to use either the standalone Max application (if you don't have Max or Visual Studio 2022 installed on your pc) or the .mxe collective that can be opened with Max.

Instructions on how to use this application are available inside of the application itself, but it is important to note that, to generate output, this application will require you to use two collections of data: the Markov model generated by [ml.markov] (or the compacted version that is used for the MIDI portion of the application) and the collection of values associated with that model. The model assumes a continuum of values related to any value sent into it; e.g. if it receives a value 127, it will assume that there are 128 (0-127) states and will generate lists of probabilities that are as long as the number of states. Because this can generate lists of enormous size (imagine sending a duration value of 10000 ms into this object...), the application collects each unique value and sends only the indices of unique values into the [ml.markov] object. For example, if a Markov object receives only the values 1000, 2000, and 3000, it will normally generate lists for each transition from these values that contain 3001 probabilities; however, my application will recognize that there are only three unique values and will send only the indices for 1000, 2000, and 3000 into [ml.markov], which will then generate lists of only 3 probabilities for each transition. This method allows my application to generate and manipulate much more compact lists of data.

Despite this workaround, the application can only handle so much data, so it is really up to the user to make sure that the collections generated are moderately-sized. Furthermore, the xml aspect of this application is very limited, mainly due to the fact that it learns each unique state of a score (determined by onsets), which one can imagine may be very high for very long scores. Even with data learned from short scores of only a few minutes, xml generation can crash when trying to generate more than 45 s of notated music. For this reason, and especially for xml generation, it is better to generate short sections of a score at a time, and to use either the append feature of the application to create longer scores, or to combine them manually in your preferred notation software.

Ultimately, you should use this application to generate material for further editing in your preferred notation software (or DAW, if you're exporting MIDI). The main purpose of this application is to integrate modern methods of generation into the art of composing for acoustic/live instruments, but it is also a way to truncate the time composers/musicmakers spend actually notating musical ideas.

With all this in mind -- happy creating! Please let me know of any major issues you find (it is not a perfect application) in the Issues tab, and I would also love to hear/see any music you make with this application.

  • Alexander "Xander" Toth

About

machine learning software for generating music notation

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors