Markov chains music generation

Here’s a project I’ve had on the back-burner for many years. Following the natural progression of generating stuff based on Markov chains, I decided a while ago to port the algorithm to music.

Music presents many challenges that I haven’t been able to address well so far. As a result, what the algorithm produces always had a bitter unfinished aftertaste to me, hence why I haven’t published anything about it for years.

  • Music is multidimensional, time is relevant and needs it own analysis and subsequent generation
  • The interconnectedness of different instruments from the piece is important as well.
  • Random generation even based on Markov chains fails to produce any structure. The pieces all sound like a long solo without chorus or any other repetition that would give us what we strive for: anticipation. In other words, it’s perfect for jazz.

I’m hoping that publishing this will give me the kick in the nuts necessary to keep improving it. Without further ado, here’s what I have so far.


Future improvements:

  • add to corpus
  • clean pieces analyzed of noise
  • try to infuse structure

7 Replies to “Markov chains music generation”

  1. C’est toujours avec Chopin que je génère les morceaux les plus intéressants.

    En tout cas la musique ainsi générée ne pourra AMA jamais donner quelque chose d’aussi harmonieux qu’un morceau où chaque note est pesée et pensée. Le but n’est pas là tu vas me dire (mais alors quel est le but ?).
    C’est comme les jeux vidéos où l’IA si évoluée soit-elle ne remplacera jamais le joueur (sauf aux échecs, ouais Alex je te vois venir). Tiens ça me fait me demander : est-ce qu’on peut appliquer les chaînes de Markov aux jeux vidéos, peut-être pour introduire un peu d’imprévisibilité dans les réactions de l’IA ?

  2. yoyoyo
    ahhh ben suis content de voir que tu ty sois remis.

    Super cool mec. Jai pas encore genere bcp de morceaux mais cest promet
    Franchement je pense que si tu veux optimiser ton soft afin quil genere des morceaux plus coherents, faudrait introduire de veritables notion de structure musicale. Et cest pas forcement complique je pense selon la methode.
    For Ex: si tu veux introduire des recurences correspondant a des sections diff, tu pourrais diviser les paramatres en plusieurs sections. Donc si on veut un couplet et un refraim, on pourrait regler les parametres pour chacune des sections et lors de la generation du truc tu definis que lesection 1 est multipliée x fois et se reproduit a tel instant dans le temps.

    Lets skype about this

      1. Je suis familier avec le concept mais cela ne s’applique pas a ce que je fait. J’extrais l’essence numérique de morceaux pour en regénérer aléatoirement, si le nombre d’or fait partie de l’essence d’un artiste alors il ressortira, sinon je n’ai pas lieu de l’imposer arbitrairement.

    1. On peut diviser et répéter autant qu’on veut cela ne peux pas être de manière arbitraire. Lors de l’analyse, de la même façon que je détecte le début et la fin d’un morceau (très facile forcément) il faudrait pouvoir détecter les parties répétées pour savoir où est la structure. Pas évident mais faisable.

      En tous cas je suis bien content que ça sucitte de la discussion, ça aide à y réfléchir.

  3. Exciting project. Pas plus tard qu’hier je m’amusais un peu avec le générateur que tu avais posté pour les textes de Lovecraft et les discours de George Bush (ce serait marrant de mélanger les deux tiens en passant). Ça m’a sorti des trucs assez troublants, du genre : “we must harbour terrorists in order to hold democracy in hostage”.

    Sinon pour la zik tu peux pas introduire une boucle ou un truc du genre qui ferait que la première mesure soit répétée toute les X mesures ? Ça produirait un effet de refrain qui donnerait l’impression d’une structure.

    En tout cas je viens de générer un truc super intéressant avec Chopin. Y a pas moyen de sauvegarder le morceau une fois généré ?

    1. Tout ce qui est généré se retrouve ici: http://ben.akrin.com/generation/music/pieces/

      Si t’as une idée de l’heure a laquelle tu as crée ton oeuvre tu dois pouvoir trouver 🙂

      Je pourrais faire en sorte que la premiere mesure soit répétée en effet, mais l’ordi n’a pas de notion de ce qu’est une mesure pour l’instant.

      De la même manière que j’analyse des suites de notes et des suites de temps je pourrais essayer de trouver quelles sont les répétitions présentes dans les morceaux mais le problème est que il y a toujours des nuances qui les rendent inexactes et donc difficiles a detecter.

      Une autre méthode a laquelle j’ai pensé c’est d’augmenter les probabilités au fil de la géneration pour les séquences déja parues, cela donnera de la répétition pour sur mais surement assez artificielle.

      J’ai quelques autre méthodes en tête (trailing depth) mais je ne sais pas combien de temps j’aurai pour les implémenter et tester. Surtout que j’ai d’autres plans pour cet algorithme.

Leave a Reply

Your email address will not be published. Required fields are marked *