• ### MIDI into [seq] and Markov chains

Hi everyone,
I'm loading some MIDI files (format 0) into [cyclone/seq] and saving them to text, I get a series of lines that are 3 or 4 elements long.
The first element seems to be the time (in ms?) at which to play the line, item 3 is the midi note and item 4 is the velocity. I can't find any reference to what item 2 is. The text goes something like this:
0 192 0;
0 144 36 28;
0 192 0;
0 192 0;
7.12308 176 64 127;
61.055 144 36 0;
61.055 144 48 28;
122.11 144 55 25;
253.06 144 55 0;
253.06 144 60 26;
383.483 144 60 0;
383.483 144 62 24;

etc..

Any help would be greatly appreciated, thanks in advance.

• Posts 72 | Views 33376
• I still have to check. The thing is that I like the approach where you can design your own probability matrix without the "learning" process. There's an advantage if you just sit and write down how many times you want "A" to be followed by "B" and etc...

As for the machine learning approach, your markov design is flawless and extremely versatile and I've put it in my library already

• @ingox would it be possible too choose the most similar value, if there is no same value (of course, the similarity needs to be defined first)?

• @Jona In the sense that markov chains define similarity in that a note was following another note in the source material?

Maybe you can describe a bit more how notes would be selected, maybe with an example?

• @ingox maybe it does not make so much sense for single notes (not sure how much different notes an average song has - but not too much) but for chords and for velocity perhaps. Now a problem is, if we do not look at the beginning and the end of a song, there is always a same value in a markov chain. So maybe the same value just has a higher probability than a similar value? I have to think about a concept...

• @Jona Generally speaking, a markov chain can be created not only over notes or chords, but also over abstract values. For example, in the [markov] object, the chains are created over ids. So you could for example put your notes/chords/velocity values in a [text] and use the row numbers to build the chains using [markov]. [markov] would in turn output row numbers and you could decide what to play from there.

• @ingox @porres Hi, just stumbled across your Markov remarks. A long time ago I wrote a markov external for pure data (c code, no abstraction) which can handle markov chains of any order (realtime adjustable) and has the option for internal/external feedback changing probabilities and such which is still functional. As it uses binary search trees it is extremely fast and has (somewhat limited) support for lists of integers as elements (like dtime, keynum, velocity or chords).
It is quite flexible as it also allows to define deviations in the values to still being considered as being equal and more.
It's open source and I can dust it off and send it in case you're interested. I'm never on this forum and just registered for letting you know. Don't know if I receive/see any answer from you.

• @Orm that sounds great. Would be nice to try your external.

• I just applied recently with my midifilemarkovgenerator which is based on this abstraction for the MIDI innovation awards:
https://www.midi.org/component/zoo/item/midifilemarkovgenerator
Not sure, if it makes sense. But you can vote for it or something else until the 14th of may, if you like it...

Posts 72 | Views 33376
Internal error.

Oops! Looks like something went wrong!