2009-07-24 10 views
5

Je suis intéressé par la musique automatique. Je pensais à un programme alimenté par un grand nombre d'arpèges de 1 mesure (= séquences de notes de longueur fixe, pour plus de simplicité) et qui génère ses propres séquences, en fonction de ce qu'il a appris. Pour commencer, je sais que je pourrais utiliser la lettre (digram? Trigram?) frequency analysis, seulement appliqué aux hauteurs de note, puis générer ma séquence basée sur les probabilités de fréquence.Algorithme pour l'imitation musicale?

Y a-t-il des algorithmes plus avancés que vous connaissez, peut-être expressément enseignés pour des séquences musicales?

Répondre

6

L'article de Wikipedia sur la composition algorithmique est une excellente amorce. Il décrit certains des modèles utilisés pour la création musicale algorithmique, des compositeurs notables, des références de livres et des logiciels de composition algorithmique.

http://en.wikipedia.org/wiki/Algorithmic_composition

+0

Différents algorithmes de fractale et de triage ont tendance à sonner musicalement. – Quickredfox

2

L'analyse statistique des pistes existantes pour la musique est bien-moyenne. Il y a rarement quelque chose d'intéressant parce qu'il tend à reproduire toutes les caractéristiques communes de tout ce que vous avez analysé.

La musique est multidimensionnelle. Vous pouvez, de toute évidence, analyser tout ou partie des dimensions qui vous intéressent. Pitch, tempo, séquence de notes, progressions harmoniques, changements de volume, n'importe quoi. Tout.

La musique est subtile et complexe, donc il y a toujours quelque chose de plus à analyser. AFAIK (mon fils est un compositeur), ce qui est plus intéressant est d'inventer votre propre algorithme unique pour générer de la musique qui est raisonnablement distinctif.

Voici quelque chose que mon fils a spécifié. Il génère une séquence de 48 événements musicaux autour desquels la pièce est construite.

#!/usr/bin/env python 
""" 
there are 8, 3-note sets. 
each one can occur on 3 different beats. 
each pitch of the 3 note set can be in one of 3 octaves and it can either be a harmonic or a fingered note. 
""" 
import random 

noteSetChoices = [ "C-E-G", "C-F-A", "C-E-A", "D-F-A", "D-F-B", "D-G-B", "E-G-B", "F-A-C" ] 
beatChoices= [ "1 - - -", "- 2 - -", "- - - 4" ] 
octaveChoices= [ 1, 2, 3 ] 
techniqueChoices= [ 'Fingered', 'Harmonic' ] 

for n in range(48): 
    note= random.choice(noteSetChoices) 
    beat= random.choice(beatChoices) 
    octave= random.choice(octaveChoices) 
    technique= random.choice(techniqueChoices) 
    print octave, note, technique, beat 
+0

Comment est la musique sur Spore? Je suis à peu près sûr que la musique est générée automatiquement. –

+0

Mmmmh, cela signifie que vous connaissez déjà les canons de genre, et que vous ne les extrayez pas d'autres chansons. – janesconference

+0

@janesconference: Je ne sais pas squat, en fait. Je suis un bassiste, donc je comprends un peu; mon fils est le compositeur. –

4

Être musicien moi-même et un grand génie logiciel, je htink je peux faire la lumière fraîche ici: P je l'ai fait beaucoup de travail sur le sujet moi-même et l'intention de faire quelque chose de grand basé autour ceci dans le futur. Lorsque vous écrivez un algorithme, votre objectif est de trouver une solution - par exemple, pour trier les problèmes, il faut avoir une liste triée. Dans la composition musicale algorithmique, la solution est (habituellement) d'avoir une chanson, ou une mélodie qui est agréable, structure, etc.

Le problème avec la solution (hah) est que ce n'est pas seulement objectif, mais la solution est largement ouvert. Avec un algorithme de tri, vous n'avez qu'un seul moyen de trier une liste. Avec la composition musicale, vous avez des millions de chansons agréables/whatevr votre objectif est.

Vous aurez donc besoin d'un algorithme qui est bon pour ne pas trouver des solutions définitives, mais des solutions OPTIMAL. Ma suggestion est un algorithme génétique ou similaire. Les algorithmes génétiques sont excellents car ils peuvent créer un pool de différentes solutions optimales. Vous devez diviser la composition en plusieurs parties - avoir un GA pour la mélodie, GA pour le rythme, GA pour la structure, etc. Et concevoir votre fonction de remise en forme en fonction de vos besoins.

Bien sûr, ceci n'est qu'une solution au problème; il y en a beaucoup et le lien wikipedia répertorié avant est un bon début.

Je recommande de vérifier: Genjam: un algorithme génétique de jazz d'improvisation conçu pour le commerce solos- http://www.it.rit.edu/~jab/GenJam.html

Et ce livre est très instructif: http://www.springer.com/computer/information+systems/book/978-1-84628-599-8

Je suppose une autre façon amusante serait avec neurale réseaux .... mais leur donner des ensembles serait un peu un problème probablement .... c'est beaucoup plus de travail.

Quoi qu'il en soit, bonne chance dans vos projets: P

+0

En outre, l'étude de la composition musicale et de l'harmonie vous aidera à concevoir des fonctions de fitness: D – RyanCacophony

0

Il aide vraiment si vous connaissez les conventions de la musique, afin de lire des livres et des articles écrits pour enseigner aux hommes comment composer des chansons. Vous aurez de bonnes idées.

Enfoncez un peu de pédale de temps en temps pour augmenter la tension. Utilisez la technique séculaire d'appel-réponse entre deux instruments différents.

1

Bien qu'il soit généralement prévu de travailler sur des séquences plus longues qu'une seule barre, le chaînage de Markov est un moyen simple et efficace de générer de la musique similaire à son entrée. Pour un exemple écrit en Python en utilisant RTcmix pour la génération audio, voir mon implémentation here.

Il est basé sur le chapitre de chaînage Markov de Notes du Metalevel, un excellent texte sur la composition algorithmique.

Questions connexes