2009-07-24 9 views
5

Sono interessato alla creazione di musica automatica. Stavo pensando a un programma che è alimentato con un gran numero di arpeggi da 1 battuta (= sequenze di note di lunghezza fissa per semplicità) e genera le sue sequenze, basate su ciò che ha appreso.Algoritmo per l'imitazione musicale?

Per iniziare, so che potrei usare la lettera (digram? Trigram?) frequency analysis, applicata solo ai pitch di nota, e quindi generare la mia sequenza in base alle probabilità di frequenza.

Esistono algoritmi più avanzati che conoscete, forse espressamente insegnati per le sequenze musicali?

risposta

6

L'articolo di Wikipedia su Composizione algoritmica è un eccellente primer. Descrive alcuni dei modelli utilizzati per la creazione di algoritmi musicali, i notevoli compositori, i riferimenti bibliografici e il software di composizione algoritmica.

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

+0

Vari algoritmi di frattali e di ordinamento tendono a suonare musicali. – Quickredfox

2

Analisi statistiche di lead esistenti su musica che è - beh - media. Raramente c'è qualcosa di interessante perché tende a riprodurre tutte le caratteristiche comuni di qualunque cosa tu abbia analizzato.

La musica è multi-dimensionale. Puoi, chiaramente, analizzare una o tutte le dimensioni che ti interessano. Pitch, tempo, sequenza di note, progressioni armoniche, variazioni di volume, qualsiasi cosa. Qualunque cosa.

La musica è sottile e complessa, quindi c'è sempre qualcosa da analizzare.

AFAIK (mio figlio è un compositore) la cosa più interessante è inventare il proprio algoritmo unico per generare musica che sia ragionevolmente distintivo.

Ecco qualcosa che mio figlio ha specificato. Genera una sequenza di 48 eventi musicali che il pezzo è costruito intorno.

#!/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

Come è la musica su Spore? Sono abbastanza sicuro che la musica sia generata automaticamente. –

+0

Mmmmh, questo significa che conosci già i canoni di genere e non li estrai da altri brani. – janesconference

+0

@janesconference: non conosco lo squat, in realtà. Sono un bassista, quindi capisco un po '; mio figlio è il compositore. –

4

Essendo io stesso un musicista e di un Software Engineering importante, io htink posso fare una certa luce fredda qui: P Ho fatto un sacco di lavori in materia di me e ha intenzione di fare qualcosa di grande base intorno questo in futuro.

Quando si scrive un algoritmo, il vostro obiettivo è quello di trovare un esempio di soluzione, nei problemi di ordinamento è di avere una lista ordinata. Nella composizione musicale algoritmica, la soluzione è (di solito) avere una canzone, o una melodia che è gradevole, ha una struttura, ecc.

Il problema con la soluzione (hah) è che non è solo obiettivo, ma la soluzione è ampiamente aperto. Con un algoritmo di ordinamento, hai solo un modo per ordinare un elenco. Con la composizione musicale, hai milioni di canzoni piacevoli/whatevr il tuo obiettivo è.

Quindi avrete bisogno di un algoritmo che sia utile per non trovare soluzioni definitive, ma soluzioni OTTIMALI. Il mio suggerimento è un algoritmo genetico o simile. Gli algoritmi genetici sono grandi perché possono creare un pool di varie soluzioni ottimali.

Avresti bisogno di rompere la composizione in parti, avere un GA per la melodia, GA per il ritmo, GA per la struttura, ecc. E progettare la tua funzione di fitness in base alle tue esigenze.

Naturalmente questa è solo una soluzione al problema; ci sono molti e il link wikipedia elencato prima è un ottimo inizio.

mi raccomando check-out: Genjam: un jazz di improvvisazione Genetic Algorithm progettato per operare solos- http://www.it.rit.edu/~jab/GenJam.html

E questo libro è molto illuminante: http://www.springer.com/computer/information+systems/book/978-1-84628-599-8

Suppongo che un altro modo divertente sarebbe con neurale reti .... ma dare loro dei set potrebbe essere un po 'un problema probabilmente ... è molto più lavoro.

In ogni modo, buona fortuna per le vostre iniziative: P

+0

Inoltre, lo studio della composizione musicale e dell'armonia contribuiranno notevolmente a progettare le funzioni di fitness: D – RyanCacophony

0

Aiuta davvero se si sa convenzioni della musica, in modo da leggere libri e articoli scritti per insegnare all'uomo come comporre canzoni. Otterrai grandi idee.

Getta un po 'di pedale ora e poi per creare tensione. Usa la tecnica secolare di risposta alla chiamata tra due strumenti diversi.

1

Anche se generalmente è pensato per lavorare su sequenze più lunghe di una battuta, il concatenamento di Markov è un modo semplice ed efficace di generare musica simile al suo input. Per un esempio scritto in Python utilizzando RTcmix per la generazione audio, vedere la mia implementazione here.

Si basa sul capitolo di concatenamento Markov da Note da Metalevel, un eccellente testo sulla composizione algoritmica.