Sequence morphing

redhexagonal's icon

I'm trying to build a basic 16 step drum sequencer which can morph between presets in a musical way. I know matrixcontrol can morph, but it does it it a particular way that doesnt seem musical - it doesnt constrain its morphing horizontally for instance, and it doesnt morph between the number of active cells, only their position. Also it seems quite laggy.
After a bit of experimenting with multisliders it seems there are several different ways to morph between a sequence of, say 6 hits and 3 hits.
I'm wondering if anyone has found any general solutions or useful tricks to help with morphing sequences?

double_UG's icon

take multisilder for the velocity and use max presets the morph between the differnt velocitys

Max Patch
Copy patch and select New From Clipboard in Max.

redhexagonal's icon

To be clear, I want to morph the positions and number of notes, not just fade between midi sequences (alot easier).

redhexagonal's icon

an example would be how to morph from sequence

1000101010001001
to
0010100000000010

where 1 is a drum hit and 0 is a rest

Roman Thilenius's icon

morphing the velocity values (as far as they control linear gain) into each other can still be part of a solution.

regarding the position of the events on the timeline, you already noticed that there is a problem when the number of events is not the same.

there are a few more things to solve, IMO. for example you might want to limit how much a position may move at all.

your example above shows well that it wont be enough to move any event of sequence 1 towards the position of the closest event of sequence 2.

why dont you start with the GUI, which lets the user choose which position should move to which new position. this could be done for _all events of sequence 1, or let the user choose which movements should be forced, and interpolate everything between the movements.

this is more or less how image morphing also works. without fixed points set by the user a useful morph between two faces is hard to realize.

redhexagonal's icon

your example above shows well that it wont be enough to move any event of sequence 1 towards the position of the closest event of sequence 2.

Doesn't this work ok ? They can dissapear as they overlap . I'm not sure how musical this is though.

I made a multiplier based morphed but all the events entered and exited form the end of the sequence rather than merging or emerging from notes. And also one which morphs to the nearest event (see below), though the number of events tends to vary erratically in the morph. Not sure which is best, or if there are more musical ways of doing this. Simple crossfading does sound quite good, but it doesn't really generate any new sequences. Is there something clever you can do with jitter objects maybe?

Max Patch
Copy patch and select New From Clipboard in Max.

Roman Thilenius's icon

yeah, it is hard to find out how to do it without ending up with something that is less interesting than mixing the sequences against each other.

did you already try to quantize morphed positions to a grid of 1/64?

redhexagonal's icon

If you mean did I allow events at a resolution of 64 events per bar rather than 16, no , I assumed that would not sound rhythmically plausible. Maybe i'm wrong.

i'm thinking some kind of predetermined weighting or conditionals might be necessary...could be complex.

I had another go with matrixcontrol last night, morphing the same number of events is just plain wierd, its like the whole thing rotates around the matrix, I have no idea what it would be used for or how its programmed!

Roman Thilenius's icon

no i meant 64 instead of stepless.

during a slow morph from A into B it would not make a big difference, but it would prevent that events are 2 milliseconds close to each other and produce noticable flanging artefacts.

i remember an old windows vst with this approach.

tmhglnd's icon

You could set the matrixcontrol to dialmode and fill in a range (for example 0-99). Then you can fill in the probabilities per beat, and interpolate between probabilities. Maybe that is something you are looking for?

Max Patch
Copy patch and select New From Clipboard in Max.

redhexagonal's icon

that a good solution, thanks!