Je réfléchis depuis longtemps à la génération procédurale de contenu et je n'ai jamais vu beaucoup d'expérimentation 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 soit complètement statique, soit simplement des boucles en couches (par exemple Spore).
Pour cette raison, j'ai pensé à des techniques optimales de génération de musique, et je suis curieux de savoir ce que les autres ont en tête. Même si vous n'y avez pas déjà pensé, qu'est-ce qui, selon vous, 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 d'entrée (humeur, vitesse, peu importe).
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 trouverez une technique qui fonctionne bien pour la génération de mélodie, d'harmonie, de rythme et de basse dans tous les genres de musique.
chaînes de Markov , par exemple, sont bien adaptées à la génération de séquences mélodiques et harmoniques. Cette méthode nécessite l'analyse des chansons existantes pour construire 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.
Réseaux de neurones sont bien adaptés à prédiction de séries chronologiques (prévision), ce qui signifie qu'ils sont également adaptés à la `` prédiction '' d'une séquence musicale lorsqu'ils sont entraînés contre 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 avantage sur l'approche de la chaîne de Markov autre que la réduction de l'empreinte mémoire.
En plus de la hauteur, vous aurez besoin de durée pour déterminer le rythme des notes ou accords générés. Vous pouvez choisir d'incorporer ces informations dans les états de la chaîne de Markov ou les sorties du réseau de neurones, ou vous pouvez les générer séparément et combiner les séquences indépendantes de hauteur et de durée.
Algorithmes génétiques peut être utilisé pour faire évoluer des sections rythmiques. Un modèle simple pourrait utiliser un binaire chromosome dans lequel les 32 premiers bits représentent le motif d'une grosse caisse, les seconds 32 bits une caisse claire, les troisièmes 32 bits un charleston fermé et ainsi de suite. L'inconvénient dans ce cas est qu'ils nécessitent une rétroaction humaine continue pour évaluer l'adéquation des nouveaux schémas.
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 retirée de tout bon livre ou site Web de théorie musicale. Essayez Ricci Adams ' musictheory.net .
Il y a plus de 50 ans de recherches sur ces techniques, souvent négligées par des développeurs peu familiarisés avec l'histoire de la musique informatique et de la composition algorithmique. De nombreux exemples de systèmes et de recherches qui traitent de ces problèmes peuvent être trouvés ici:
Un algorithme simple et quelque peu efficace consiste à utiliser le bruit 1/f alias "bruit rose" pour sélectionner les durées et les notes sur une échelle. Cela ressemble à de la musique et peut être un bon point de départ.
Un meilleur algorithme consiste à utiliser des "chaînes de Markov". Scannez un exemple de musique et construisez une table 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 15% susceptible d'être suivi par B, et 4% susceptibles d'être suivis d'un Bb, etc. Ensuite, choisissez simplement des notes en utilisant les probabilités des notes précédemment choisies. Cet algorithme remarquablement simple génère de très bons résultats.
Dmitri Tymoczko a ici quelques idées et exemples intéressants:
http://music.princeton.edu/~dmitri/whatmakesmusicsoundgood.html
Mon logiciel utilise la théorie évolutive appliquée pour "faire grandir" la musique. Le processus est similaire au programme The Blind Watchmaker de Richard Dawkins - MusiGenesis ajoute des éléments musicaux au hasard, 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 ce qui ne sonne pas bien, et vous n'avez pas besoin de formation musicale pour l'utiliser.
L'interface souffle, mais elle est ancienne - poursuivez-moi.
J'ai toujours aimé les anciens jeux Lucasarts qui utilisaient le système iMuse, qui produisait une bande-son réactive sans fin pour le jeu et était très musical (car la majeure partie était toujours créée 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 encore 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'abandonnerais pas l'utilisation d'un composer - un vrai humain composer produira des résultats beaucoup plus musicaux et plus écoutables qu'un algorythme .
Comparez-le à l'écriture d'un poème: vous pouvez facilement générer des poèmes non-sonnants qui sonnent très avant-gardistes, mais reproduire shakespeare avec un algorythme est difficile, pour le moins.
La recherche sur la génération de musique procédurale non ennuyeuse remonte à loin. Parcourez les anciens et les nouveaux numéros de Computer Music Journal http://www.mitpressjournals.org/cmj (pas de vrai nom de domaine?) Il contient de sérieux articles techniques utiles aux bricoleurs de synthèse musicale, aux jockeys de fer à souder , ont mordu des éleveurs et des chercheurs universitaires. Ce n'est pas un chiffon moelleux de critiques et d'interviews comme plusieurs magazines que vous pouvez trouver dans les grandes librairies.
Avez-vous jeté un œil à SoundHelix (http://www.soundhelix.com)? C'est un Open-Source Java framework pour la création de musique aléatoire algorithmique qui produit une musique assez soignée. Vous pouvez utiliser SoundHelix comme une application autonome, comme une applet intégrée dans une page Web, comme une 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
Un si gros sujet. Vous pouvez jeter un œil à mon application iPad, Thicket ou mon logiciel Ripple sur morganpackard.com. D'après mon expérience, la plupart des approches académiques de la génération de musique dynamique proposent des trucs qui sonnent bien, académiques. Je pense que les trucs les plus réussis se trouvent en marge du monde club/electronica. Monolake est mon héros à cet égard. Des trucs très écoutables, très générés par ordinateur. Ma propre musique n'est pas mauvaise 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.
Le livre Composition algorithmique est un bon tour d'horizon des différentes méthodes utilisées:
"Les sujets traités sont: les modèles de Markov, les grammaires génératives, les réseaux de transition, le chaos et l'autosimilarité, les algorithmes génétiques, les automates cellulaires, les réseaux de neurones et l'intelligence artificielle."
C'est un bon point de départ sur ce vaste sujet, mais il ne décrit jamais en profondeur le fonctionnement de chaque méthode. Il donne un bon aperçu de chacun, mais ne suffira pas si vous ne les connaissez pas déjà.
La technique que j'ai envisagée est de créer de petits motifs musicaux, jusqu'à un bar environ. Marquez ces motifs avec des identifiants de sentiment tels que "excitation", "intense", etc. Lorsque vous souhaitez générer de la musique pour une situation, choisissez quelques motifs basés sur ces balises et choisissez un instrument avec lequel vous voulez jouer. En vous basant sur l'instrument, découvrez comment combiner les motifs (par exemple, sur un piano, vous pourrez peut-être tout jouer ensemble, en fonction de la portée de la main, sur une guitare, vous pouvez jouer les notes en succession rapide), puis le rendre sur PCM . De plus, vous pouvez changer de clé, changer de vitesse, ajouter des effets, etc.
La technique spécifique que vous décrivez est quelque chose sur laquelle Thomas Dolby travaillait il y a dix ou quinze ans, bien que je ne me souvienne pas maintenant de ce qu'il appelait, donc je ne peux pas vous donner un bon terme de recherche.
Pas tout à fait ce que vous recherchez, mais je connaissais quelqu'un qui a envisagé de générer automatiquement des DJ sets appelé Content Based Music Similarity .
Si vous êtes dans des théories plus profondes sur la façon dont la musique est liée, site Bill Sethares a quelques rebondissements intéressants.
J'ai cherché à faire cette proposition de projet - "8.1 " du groupe de recherche "Théorie et pratique du langage de programmation" de l'Université de Copenhague - département de CS:
8.1 Récolte automatisée et analyse statistique des corpus musicaux
L'analyse traditionnelle des partitions consiste en une ou plusieurs personnes analysant le rythme, les séquences d'accords et d'autres caractéristiques d'une seule pièce, dans le contexte d'une comparaison souvent vague d'autres pièces par la même composer ou d'autres compositeurs de la même période.
L'analyse automatisée traditionnelle de la musique a à peine traité les partitions, mais s'est concentrée sur l'analyse du signal et l'utilisation de techniques d'apprentissage automatique pour extraire et classer, par exemple, l'humeur ou le genre. En revanche, les recherches naissantes à DIKU visent à automatiser certaines parties de l'analyse des partitions. La valeur ajoutée est la possibilité d'extraire des informations de grands volumes de partitions qui ne peuvent pas être facilement faites à la main et ne peuvent pas être analysées de manière significative par des techniques d'apprentissage automatique.
C'est - à mon sens - la direction opposée 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.
Je travaille 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 d'accords, puis j'ai pu le laisser générer aléatoirement du contenu à partir de ces Je suis sûr qu'il y a plus de théorie et de modèles qu'un système comme celui-ci pourrait être enseigné, en particulier par quelqu'un qui comprend mieux le sujet. Ensuite, vous pouvez 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 piste généré aléatoirement peut vous être utile. Quelqu'un avec une solide compréhension des progressions d'accords pourrait créer une structure de chanson à partir de techniques comme celle-ci et implémenter des mélodies aléatoires contraintes comme celle-ci. Ma connaissance de la théorie musicale ne va pas aussi loin.
Mais en gros, vous devrez coder la théorie du type de musique que vous souhaitez générer, puis l'utiliser comme contrainte pour un algorithme pour explorer de manière procédurale la portée de cette théorie.
À la fin des années 90, Microsoft a créé un contrôle ActiveX appelé "Interactive Music Control" qui a fait exactement ce que vous cherchiez. Malheureusement, ils semblent avoir abandonné le projet.
À mon avis, 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 par des heures de sortie musicale de ses algorithmes (qui, je pense, étaient principalement basés sur Markov Chain) pour choisir les quelques-uns qui se sont bien déroulés.
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" accorderait beaucoup de points pour une ligne de basse qui présente des décalages et des parties de batterie avec des collets sur les backbeats mais soustrait des points pour des harmonies fortement dissonantes.
Le fait est que le processus de composition musicale est rempli de tellement de pratiques idiomatiques qu'il est très difficile de les modéliser sans une connaissance spécifique du domaine.