Algoritmo per la musica imitazione? [chiuso]
Domanda
Mi interessa fare musica automatica. Stavo pensando a un programma che è alimentato un gran numero di arpeggi 1-bar (sequenze di lunghezza = fisso di note, per semplicità) e genera le proprie sequenze, sulla base di ciò che ha imparato.
Per cominciare, so che potrei usare la lettera (digram? Trigramma?) analisi della frequenza , applicato solo a notare piazzole, e quindi generare la mia sequenza sulla base di probabilità di frequenza.
Ci sono algoritmi più avanzati si sa di, forse espressamente insegnato per le sequenze di musica?
Soluzione
L'articolo di Wikipedia su Algorithmic Composizione è un eccellente primer. Descrive alcuni dei modelli utilizzati per la creazione di algoritmi di musica, compositori di rilievo, i riferimenti del libro, e software di composizione algoritmica.
Altri suggerimenti
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 a questo in futuro <. / p>
Quando si scrive un algoritmo, il vostro obiettivo è quello di venire con un esempio ribalta soluzione-, nello smistamento dei problemi si tratta di avere un elenco ordinato. In composizione musicale algoritmica, la soluzione è (di solito) di avere una canzone, o una melodia che è piacevole, ha struttura, ecc.
Il problema con la soluzione (ah) è che non è unico obiettivo, ma la soluzione è enormemente indeterminato. Con un algoritmo di ordinamento, si ha solo un modo per ordinare un elenco. Con composizione musicale, si dispone di milioni di canzoni piacevoli / whatevr il vostro obiettivo è.
Quindi sarà necessario un algoritmo che è buono per non trovare soluzioni definitive, ma le soluzioni ottimali. Il mio suggerimento è un algoritmo genetico o simili. algoritmi genetici sono grandi perché possono creare un pool di varie soluzioni ottimali.
Si sarebbe bisogno di rompere la composizione in parti- hanno un GA per la melodia, per il ritmo GA, GA per la struttura, ecc e progettare la vostra funzione di fitness per soddisfare le vostre esigenze.
Naturalmente questa è solo una soluzione al problema; ci sono molti e il link wikipedia elencati prima è un ottimo inizio.
Mi consiglia di check-out: Genjam: un jazz di improvvisazione Genetic Algorithm destinato al commercio solos- http://www.it.rit.edu/~jab/GenJam.html
E questo libro è molto illuminante: http://www.springer.com/ computer / informazioni + sistemi / libro / 978-1-84628-599-8
Credo che un altro modo divertente sarebbe stato con le reti neurali .... ma dando loro set woud essere un po 'un problema, probabilmente .... è molto più lavoro.
In ogni modo, buona fortuna per le vostre iniziative: P
L'analisi statistica dei cavi esistenti per la musica che è - bene - media. Raramente c'è niente di interessante perché tende a riprodurre tutte le caratteristiche comuni di tutto ciò che analizzato.
La musica è multi-dimensionale. È possibile, in modo chiaro, analizzare una o tutte le dimensioni che vi interessano. Pitch, ritmo, sequenza di note, progressioni armoniche, variazioni di volume, qualsiasi cosa. Qualunque cosa.
La musica è sottile e complessa, quindi c'è sempre qualcosa in più da analizzare.
Per quanto ne so (mio figlio è un compositore) ciò che è più interessante è quello di inventare il proprio algoritmo unico per la generazione di musica che è ragionevolmente distintivo.
Ecco qualcosa di mio figlio specificato. Si 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
Anche se è generalmente destinato a lavorare su sequenze più lunghe di una barra, Markov concatenamento è un modo semplice, efficace per generare simili al suo ingresso. Per un esempio scritto in Python utilizzando RTcmix per la generazione di audio, vedere la mia implementazione qui .
Si basa off del concatenamento capitolo Markov da Note dal metalivello , un ottimo testo sulla composizione algoritmica.
Aiuta davvero se si conoscono le convenzioni della musica, in modo da leggere libri e articoli scritti per insegnare all'uomo come comporre canzoni. Otterrete grandi idee.
Gettare un certo punto pedale in ora e poi per costruire la tensione. Usare la tecnica antica di chiamata-risposta tra due strumenti diversi.