Techniques de génération de musique procédurale

J’ai longuement réfléchi à la génération procédurale de contenu et je n’ai jamais beaucoup expérimenté avec la musique procédurale. Nous avons des techniques fantastiques pour générer des modèles, des animations, des textures, mais la musique est toujours complètement statique ou simplement en boucle (par exemple, Spore).

À cause de cela, j’ai pensé à des techniques de génération de musique optimales, et je suis curieux de savoir ce que d’autres personnes ont en tête. Même si vous ne l’avez pas déjà envisagé, que pensez-vous que cela fonctionnera bien? Une technique par réponse s’il vous plaît, et inclure des exemples si possible. La technique peut utiliser des données existantes ou générer la musique entièrement à partir de zéro, peut-être sur une sorte de saisie (humeur, vitesse, etc.).

Automates Cellulaires – lire .

Vous pouvez également l’essayer ici .

Modifier:

rakkarage a fourni une autre ressource: http://www.ibm.com/developerworks/java/library/j-camusic/

Le système le plus efficace combinera probablement plusieurs techniques. Je doute que vous trouviez une technique qui fonctionne bien pour la génération de séquences mélodiques, harmoniques, rythmiques et basses dans tous les genres de musique.

Les chaînes de Markov , par exemple, conviennent bien à la génération de séquences mélodiques et harmoniques. Cette méthode nécessite l’parsing des chansons existantes pour créer les probabilités de transition de chaîne. La vraie beauté des chaînes de Markov est que les états peuvent être ce que vous voulez.

  • Pour la génération de mélodie, essayez les numéros de note relatifs à la clé (par exemple, si la clé est C mineur, C serait 0, D serait 1, D # serait 2 et ainsi de suite)
  • Pour la génération d’harmonie, essayez une combinaison de nombres de notes relatives à la clé de l’accord, le type d’accord (majeur, mineur, diminué, augmenté, etc.) et l’inversion de l’accord (racine, premier ou deuxième).

Les réseaux neuronaux sont bien adaptés à la prévision des séries chronologiques (prévisions), ce qui signifie qu’ils sont également adaptés à la «prédiction» d’une séquence musicale lorsqu’ils sont entraînés par rapport à des mélodies / harmonies populaires existantes. Le résultat final sera similaire à celui de l’approche de la chaîne de Markov. Je ne peux penser à aucun autre avantage que l’approche en chaîne de Markov, à part la réduction de l’empreinte mémoire.

En plus de la hauteur, vous aurez besoin d’une durée pour déterminer le rythme des notes ou des accords générés. Vous pouvez choisir d’incorporer ces informations dans les états de chaîne de Markov ou les sorties de réseau neuronal, ou vous pouvez les générer séparément et combiner les séquences de hauteur et de hauteur indépendantes.

Les algorithmes génétiques peuvent être utilisés pour faire évoluer les sections rythmiques. Un modèle simple pourrait utiliser un chromosome binary dans lequel les 32 premiers bits représentent le motif d’une grosse caisse, le deuxième 32 bits une caisse claire, le troisième 32 bits un chapeau fermé et ainsi de suite. L’inconvénient dans ce cas est qu’ils nécessitent une rétroaction humaine continue pour évaluer l’aptitude des nouveaux modèles évolués.

Un système expert peut être utilisé pour vérifier les séquences générées par les autres techniques. La base de connaissances pour un tel système de validation peut probablement être levée à partir de tout bon livre de théorie musicale ou site Web. Essayez le musictheory.net de Ricci Adams.

Il y a plus de 50 ans de recherches sur ces techniques, souvent ignorées par les développeurs qui ne sont pas familiers avec l’histoire de l’informatique musicale et de la composition algorithmique. De nombreux exemples de systèmes et de recherches traitant de ces problèmes peuvent être trouvés ici:

http://www.algorithmic.net

Un algorithme simple et efficace consiste à utiliser le bruit 1 / f, appelé “bruit rose”, pour sélectionner les durées et les notes d’une échelle. Cela ressemble à de la musique et peut être un bon sharepoint départ.

Un meilleur algorithme consiste à utiliser des “chaînes de Markov” .. balayer un exemple de musique et créer un tableau de probabilités. Dans le cas le plus simple, ce serait quelque chose comme C est 20% susceptible de suivre A. Pour améliorer cela, regardez la séquence des dernières notes, par exemple “CAB” est susceptible d’être suivi de B, et 4% susceptibles d’être suivis d’un Bb, etc. Ensuite, il suffit de sélectionner des notes en utilisant les probabilités des notes choisies précédemment. Cet algorithme remarquablement simple génère de très bons résultats.

Chaînes de Markov pour la génération de musique

Dmisorting Tymoczko a quelques idées intéressantes et des exemples ici:

http://music.princeton.edu/~dmisorting/whatmakesmusicsoundgood.html

Mon logiciel utilise la théorie évolutionniste appliquée pour “développer” la musique. Le processus est similaire au programme The Blind Watchmaker de Richard Dawkins – MusiGenesis ajoute des éléments musicaux de manière aléatoire, puis l’utilisateur décide de conserver ou non chaque élément ajouté. L’idée est de garder ce que vous aimez et de laisser tomber tout ce qui ne sonne pas bien, et vous n’avez pas besoin de formation musicale pour l’utiliser.

L’interface saute, mais c’est vieux – me poursuivre en justice.

J’ai toujours aimé les anciens jeux Lucasarts qui utilisaient le système iMuse, qui produisaient une bande-son réactive sans fin pour le jeu et qui était très musicale (parce que la plupart étaient encore créés par un compositeur). Vous pouvez trouver les spécifications (y compris le brevet) ici: http://en.wikipedia.org/wiki/IMUSE

Nintendo semble être la seule entreprise à utiliser une approche similaire à iMuse pour créer ou influencer la musique à la volée.

À moins que votre projet ne soit très expérimental, je n’abandonnerai pas l’utilisation d’un compositeur – un vrai compositeur humain produira des résultats beaucoup plus musicaux et écoutables qu’un algorithme.

Comparez-le à l’écriture d’un poème: vous pouvez facilement générer des poèmes non insensés qui sonnent très avant-gardistes, mais il est difficile de reproduire le shakespeare avec un algorithme, c’est le moins que l’on puisse dire.

Avez-vous jeté un coup d’oeil à SoundHelix (http://www.soundhelix.com)? C’est un framework Java Open-Source pour la création de musique aléatoire algorithmique qui produit une musique très soignée. Vous pouvez utiliser SoundHelix en tant qu’application autonome, en tant qu’applet intégrée à une page Web, en tant qu’applet basée sur JNLP ou vous pouvez l’inclure dans votre propre programme Java.

Des exemples générés avec SoundHelix peuvent être trouvés ici: http://www.soundhelix.com/audio-examples

La recherche sur la génération de musique procédurale non ennuyeuse remonte à très longtemps. Parcourez les anciens et les nouveaux numéros du Computer Music Journal http://www.mitpressjournals.org/cmj (pas de vrai nom de domaine?). Il s’agit d’une critique et d’entrevues pelucheuses telles que plusieurs des magazines que vous pouvez trouver dans les principales librairies.

Un si grand sujet. Vous pouvez consulter mon application iPad, Thicket ou mon logiciel Ripple sur morganpackard.com. D’après mon expérience, la plupart des approches académiques à la génération de musique dynamic aboutissent à des éléments qui semblent bien, académiques. Je pense que les choses les plus réussies se trouvent en marge du monde club / electronica. Monolake est mon héros à cet égard. Des choses très écoutables, générées par ordinateur. Ma propre musique n’est pas mal non plus. “Alphabet Book” de Paul Lansky est un bel exemple de musique algorithmique extrêmement écoutable, surtout si l’on considère qu’il est un universitaire.

La technique que j’ai envisagée consiste à créer de petits motifs musicaux, jusqu’à une barre ou à peu près. Marquez ces motifs avec des identifiants tels que «excitation», «intense», etc. Lorsque vous souhaitez générer de la musique pour une situation donnée, choisissez quelques motifs basés sur ces tags et choisissez l’instrument avec lequel vous voulez jouer. Sur la base de l’instrument, déterminez comment combiner les motifs (par exemple, sur un piano, vous pourrez jouer tous ensemble, selon la scope de la main, sur une guitare, vous pourrez jouer les notes en succession rapide), puis le convertir en PCM . De plus, vous pouvez changer de clé, changer de vitesse, append des effets, etc.

La technique spécifique que vous décrivez est quelque chose que Thomas Dolby travaillait il y a dix ou quinze ans, même si je ne me souviens plus de ce qu’il a appelé ainsi je ne peux pas vous donner un bon terme de recherche.

Mais voir cet article Wikipedia et cette page Metafilter.

Le livre Composition algorithmique est un bon tour d’horizon des différentes méthodes utilisées:

“Les thèmes abordés sont: les modèles markoviens, les grammaires génératives, les réseaux de transition, le chaos et la similitude de soi, les algorithmes génétiques, les automates cellulaires, les réseaux neuronaux et l’intelligence artificielle.”

C’est un bon sharepoint départ sur ce vaste sujet, mais il ne décrit jamais en profondeur le fonctionnement de chaque méthode. Il fournit un bon aperçu de chacun, mais ne suffira pas si vous ne les connaissez pas déjà.

À la fin des années 90, Microsoft a créé un contrôle ActiveX appelé «Interactive Music Control», qui correspond exactement à vos besoins. Malheureusement, ils semblent avoir abandonné le projet.

Pas tout à fait ce que vous recherchez, mais je connaissais quelqu’un qui cherchait à générer automatiquement des sets de DJ appelés Similarity Music basé sur le contenu .

Si vous vous intéressez aux théories sur la manière dont la musique est liée, le site de Bill Sethares présente des tournures intéressantes.

Je me suis penché sur cette proposition de projet – “8.1 ” du groupe de recherche “Théorie et pratique en langage de programmation” de l’Université de Copenhague – Département CS:

8.1 Collecte automatisée et parsing statistique des corpus musicaux

L’parsing traditionnelle des partitions consiste en une ou plusieurs personnes analysant le rythme, les séquences d’accords et d’autres caractéristiques d’une même pièce, dans le contexte d’une comparaison souvent vague d’autres pièces du même compositeur ou d’autres compositeurs de la même période.

L’parsing automatisée traditionnelle de la musique a à peine traité les partitions, mais s’est concentrée sur l’parsing des signaux et l’utilisation de techniques d’apprentissage automatique pour extraire et classer, par exemple, l’humeur ou le genre. En revanche, la recherche naissante chez DIKU vise à automatiser des parties de l’parsing des partitions. La valeur ajoutée est la possibilité d’extraire des informations de grands volumes de partitions qui ne peuvent pas être facilement réalisées à la main et ne peuvent pas être analysées de manière significative par des techniques d’apprentissage automatique.

Ceci – comme je le vois – est le sens inverse de votre question, les données générées – j’imagine – pourraient être utilisées dans certains cas de génération procédurale de musique.

Mon opinion est que la musique générative ne fonctionne que lorsqu’elle passe par un processus de sélection rigoureux. David Cope, un pionnier de la musique algorithmique, passerait des heures à produire des extraits musicaux de ses algorithmes (qui, je pense, étaient principalement basés sur la chaîne de Markov) pour sélectionner les quelques résultats qui ont bien fonctionné.

Je pense que ce processus de sélection pourrait être automatisé en modélisant les caractéristiques d’un style musical particulier. Par exemple, un style “disco” atsortingbuerait beaucoup de points pour une ligne de basse qui comporte des parties décalées et des parties de batterie avec des pièges sur les temps faibles, mais soustrait des points pour des harmonies fortement dissonantes.

Le fait est que le processus de composition musicale est rempli de pratiques idiomatiques si nombreuses qu’il est très difficile de les modéliser sans connaissance spécifique du domaine.

J’ai travaillé sur un module Python pour la musique procédurale. Je viens de programmer ce que je sais sur les notes, les gammes et la construction des accords, puis j’ai pu le laisser générer du contenu de manière aléatoire à partir de ces contraintes. Je suis sûr qu’il y a plus de théorie et de schémas qu’un système comme celui-ci pourrait enseigner, surtout par quelqu’un qui comprend mieux le sujet. Vous pouvez ensuite utiliser ces systèmes comme contraintes pour les algorithmes génétiques ou la génération de contenu aléatoire.

Vous pouvez passer en revue mon implémentation ici , en particulier l’exemple de lead généré de manière aléatoire peut vous être utile. Quelqu’un avec une solide compréhension des progressions d’accords pourrait créer une structure de chansons à partir de techniques comme celle-ci et y appliquer des mélodies aléatoires limitées. Ma connaissance de la théorie musicale ne va pas aussi loin.

Mais au fond, vous devrez encoder la théorie du type de musique que vous voulez générer, puis l’utiliser comme contrainte pour un algorithme pour explorer procéduralement la scope de cette théorie.