
ML-MIDI
Generative MIDI devices based around concepts in Machine Learning, AI and Neural Networks.
Download All
Ableton Playthrough
Max and bitKlavier Playthrough
MIDI Combiner
MidiCombiner is a generative machine learning MIDI device built using the ML.Markov package in Max. The effect allows you to train a neural network on MIDI pitch data, and do so multiple times with different pieces. This ultimately gives the neural net the ability to cross between the different pieces, and generate novel sequences that blend characteristics of the different source materials.
Follow the steps in the device carefully
*** NOTE ***
When on step 2, make sure your speakers are not on full volume as it will likely get loud. I would advise to mute the audio or channel when training the neural net.

Params
AutoDurationOnOff – Toggles automatic calculation of note durations based on step speed.
ClearGrid – Clears all steps from the step grid.
ClearProb – Resets all step probability values to 0%.
DurationAll – Sets the MIDI note duration (in ms)
EditMode – Switches between editing different grid layers (pitch, probability, speedmultiplication).
Flush – Sends note-off messages to stop any hanging or stuck notes.
Length – Length of the Step Sequencer
Modulate – Transposes MIDI output in semitones.
OnOff – Enables or disables the sequencer globally.
Pitch1Direction – Sets playback direction for pitch row 1.
Pitch1Duration – Sets note duration for pitch row 1.
Pitch1RandomOrLoop – Chooses between looping or randomizing steps for pitch row 1.
Pitch1Velocity – Sets MIDI velocity for pitch row 1.
Pitch2Direction – Sets playback direction for pitch row 2.
Pitch2Duration – Sets note duration for pitch row 2.
Pitch2RandomOrLoop – Chooses between looping or randomizing steps for pitch row 2.
Pitch2Velocity – Sets MIDI velocity for pitch row 2.
Pitch3Direction – Sets playback direction for pitch row 3.
Pitch3Duration – Sets note duration for pitch row 3.
Pitch3RandomOrLoop – Chooses between looping or randomizing steps for pitch row 3.
Pitch3Velocity – Sets MIDI velocity for pitch row 3.
Pitch4Direction – Sets playback direction for pitch row 4.
Pitch4Duration – Sets note duration for pitch row 4.
Pitch4RandomOrLoop – Chooses between looping or randomizing steps for pitch row 4.
Pitch4Velocity – Sets MIDI velocity for pitch row 4.
Pitch5Direction – Sets playback direction for pitch row 5.
Pitch5Duration – Sets note duration for pitch row 5.
Pitch5RandomOrLoop – Chooses between looping or randomizing steps for pitch row 5.
Pitch5Velocity – Sets MIDI velocity for pitch row 5.
Pitch6Direction – Sets playback direction for pitch row 6.
Pitch6Duration – Sets note duration for pitch row 6.
Pitch6RandomOrLoop – Chooses between looping or randomizing steps for pitch row 6.
Pitch6Velocity – Sets MIDI velocity for pitch row 6.
Pitch7Direction – Sets playback direction for pitch row 7.
Pitch7Duration – Sets note duration for pitch row 7.
Pitch7RandomOrLoop – Chooses between looping or randomizing steps for pitch row 7.
Pitch8Direction – Sets playback direction for pitch row 8.
Pitch8Duration – Sets note duration for pitch row 8.
Pitch8RandomOrLoop – Chooses between looping or randomizing steps for pitch row 8.
Pitch8Velocity – Sets MIDI velocity for pitch row 8.
ProbAll – Sets the same probability value for all steps in all rows.
RandPitches1 – Randomizes pitch values for pitch row 1.
RandPitches2 – Randomizes pitch values for pitch row 2.
RandPitches3 – Randomizes pitch values for pitch row 3.
RandPitches4 – Randomizes pitch values for pitch row 4.
RandPitches5 – Randomizes pitch values for pitch row 5.
RandPitches6 – Randomizes pitch values for pitch row 6.
RandPitches7 – Randomizes pitch values for pitch row 7.
RandPitches8 – Randomizes pitch values for pitch row 8.
RandPitchesAll – Randomizes pitch values for all 8 pitch rows.
RandSpeedMultip – Randomly applies speed multipliers to steps.
RandomAddGrid – Adds random notes to the grid without replacing existing ones.
RandomOneGrid – Randomizes one pitch row at a time.
RandomProb1 – Randomizes step probabilities in pitch row 1.
RandomProb2 – Randomizes step probabilities in pitch row 2.
RandomProb3 – Randomizes step probabilities in pitch row 3.
RandomProb4 – Randomizes step probabilities in pitch row 4.
RandomProb5 – Randomizes step probabilities in pitch row 5.
RandomProb6 – Randomizes step probabilities in pitch row 6.
RandomProb7 – Randomizes step probabilities in pitch row 7.
RandomProb8 – Randomizes step probabilities in pitch row 8.
RandomProbAll – Randomizes step probabilities for all pitch rows.
ResetSpeedMult – Resets all speed multipliers to their default state.
SetProb1 – Sets all step probabilities in pitch row 1 to a specific value.
SetProb2 – Sets all step probabilities in pitch row 2 to a specific value.
SetProb3 – Sets all step probabilities in pitch row 3 to a specific value.
SetProb4 – Sets all step probabilities in pitch row 4 to a specific value.
SetProb5 – Sets all step probabilities in pitch row 5 to a specific value.
SetProb6 – Sets all step probabilities in pitch row 6 to a specific value.
SetProb7 – Sets all step probabilities in pitch row 7 to a specific value.
SetProb8 – Sets all step probabilities in pitch row 8 to a specific value.
SetScale – Select scale to map to the StepSequencer.
ShowHidePitches – Toggles display of pitch editor in the user interface.
SpeedNow – Displays the current playback speed for a step.
SpeedRangeHi – Sets the slowest possible step speed in MS (upper speed bound).
SpeedRangeLo – Sets the fastest possible step speed (lower speed bound).
VelocityAll – Sets MIDI velocity value for all pitch rows.
AudioToMIDIMarkovChain
AudioToMIDIMarkovChain is a generative machine learning MIDI device that can take live input, either MIDI or Audio and feed it to a neural network. This is accomplished with the ML.Markov package in Max. This device creates a neural net for both pitch and rhythm, the latter of which you can toggle on or off.
There are a couple of ways you can choose to input data into the neural net.
MIDI input options
- 1. By clicking read, and playing a MIDI file by pressing start
- 2. By playing MIDI in with your keyboard, or even playing from a MIDI track in Ableton or a MIDI file in Max
Audio input options
- 3. You can also play Audio and convert the audio to MIDI and train the neural net that way. This is done with the fiddle~ external for Max. *note this does not work in Ableton.
- 4. You can also drop an audio file in, onto the playlist~ UI object, and use that to do the conversion.
*** important step ***
When starting to train the net on live input data, you must click on '4' toggle, press start when you begin recording and stop when done. You will see in the RhythmDataView and the PitchDataView when you stop it, whether your recorded material was intercepted correctly. The process to steps 5 and 6.
