Replayer: real-time melody morphing
This Max-for-Live device lets the user morph a melody in real-time between up to four existing melodies.
A video can be viewed here: http://toneunit.com/music-generation
Four MIDI clips are assigned to a different corner of a square. On play, the device generates a stream of melody from these sources. The melody morphs between the four melodies as the user moves the pointer around on the square. Points very close to a particular corner will produce a melody almost exactly like the MIDI clip assigned to that corner. Dragging the pointer from one corner to another will gradually morph the generated melody between the input melodies.
Each pointer location triggers a stochastic process which outputs a stream of musical notes.Transition tables store probabilities for each subsequent note based on each currently playing note. The probabilities are based on musical transformations of the input melodies. This enables likelihoods to be calculated for all possible note sequences, maintaining a bias toward sequences more closely related to the input melodies.
In contrast to the Max-for-Live device Recomposer, this device does not require a separate Smalltalk compute server. The music analysis and algorithms are encapsulated in the proprietary ObjC-based Max external object contained in the device.
Practical restrictions on the input melodies used by the device (duple meter, diatonic, monophonic, etc) preclude a general downloadable version in its current form. Queries are welcome from those interested in experimenting/testing given existing constraints.
How was MAX used?
Max SDK and Max for Live were used to create a Max external and a Max for Live device to serve as a prototype for a mobile app that hybridizes and morphs musical material in real time. The algorithms themselves are Objective-C++ code compiled as a Max external, which in turn becomes part of a Max for Live device. The device provides a GUI to control musical morphing, and routes note data between Ableton Live and the Max external.