2009-07-24 10 views
5

Estoy interesado en hacer música automática. Estaba pensando en un programa que se alimenta con una gran cantidad de arpegios de 1 compás (= secuencias de notas de longitud fija, para simplificar) y genera sus propias secuencias, en función de lo que aprendió.Algoritmo para la imitación de la música?

Para empezar, sé que podría utilizar la letra (digram? Trigram?) frequency analysis, solo se aplica a los tonos de nota, y luego generar mi secuencia en función de las probabilidades de frecuencia.

¿Hay algoritmos más avanzados que conozca, tal vez expresamente enseñados para secuencias de música?

Respuesta

6

El artículo de Wikipedia sobre Composición algorítmica es una excelente cartilla. Describe algunos de los modelos utilizados para la creación de música algorítmica, compositores notables, referencias de libros y software de composición algorítmica.

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

+0

Varios algoritmos de fractal y clasificación tienden a sonar musicales. – Quickredfox

2

El análisis estadístico de los leads existentes para la música es, bueno, promedio. Raramente hay algo interesante porque tiende a reproducir todas las características comunes de lo que sea que hayas analizado.

La música es multidimensional. Puede, claramente, analizar algunas o todas las dimensiones que le interesan. Paso, tempo, secuencia de notas, progresiones armónicas, cambios de volumen, cualquier cosa. Todo.

La música es sutil y compleja, por lo que siempre hay algo más que analizar.

AFAIK (mi hijo es compositor) lo que es más interesante es inventar su propio algoritmo único para generar música que sea razonablemente distintiva.

Aquí hay algo que mi hijo especificó. Genera una secuencia de 48 eventos musicales en los que se construye la pieza.

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

¿Cómo es la música en Spore? Estoy bastante seguro de que la música se genera automáticamente. –

+0

Mmmmh, esto significa que ya conoce los cánones de género y no los extrae de otras canciones. – janesconference

+0

@janesconference: No sé squat, en realidad. Soy bajista, así que entiendo un poco; mi hijo es el compositor –

4

Ser músico yo y un software de ingeniería importante, me htink puedo arrojar algo de luz fría aquí: P he hecho un montón de trabajo sobre el tema y yo planeamos hacer algo basado en torno grande esto en el futuro

Cuando escribe un algoritmo, su objetivo es encontrar una solución; por ejemplo, al ordenar problemas, debe tener una lista ordenada. En la composición de la música algorítmica, la solución es (generalmente) tener una canción, o una melodía que es agradable, tiene estructura, etc.

El problema con la solución (hah) es que no solo es objetivo, sino la solución es muy abierto. Con un algoritmo de clasificación, solo tiene una forma de ordenar una lista. Con la composición de la música, tienes millones de canciones agradables/cuál es tu objetivo.

Por lo tanto, necesitará un algoritmo que sea bueno para no encontrar soluciones definitivas, sino soluciones ÓPTIMAS. Mi sugerencia es un algoritmo genético o similar. Los algoritmos genéticos son geniales porque pueden crear un conjunto de diversas soluciones óptimas.

Tendría que dividir la composición en partes: tener un GA para melodía, GA para ritmo, GA para estructura, etc. Y diseñe su función de acondicionamiento físico para que se ajuste a sus necesidades.

Por supuesto, esta es solo una solución al problema; hay muchos y el enlace de wikipedia mencionado anteriormente es un gran comienzo.

recomiendo echarle un vistazo: Genjam: una improvisación de jazz algoritmo genético diseñado para operar solos- http://www.it.rit.edu/~jab/GenJam.html

y este libro es muy ilustrativo: http://www.springer.com/computer/information+systems/book/978-1-84628-599-8

supongo que de otra manera sería divertido con neuronal redes ... pero darles sets probablemente sería un problema ... es mucho más trabajo.

De todas formas, buena suerte en sus empresas: P

+0

Además, el estudio de la composición musical y la armonía te ayudarán a diseñar funciones de acondicionamiento físico: D – RyanCacophony

0

Realmente ayuda si usted sabe convenciones de la música, así que lee libros y artículos escritos para enseñar a los humanos cómo componer canciones. Obtendrás grandes ideas.

Lanza un punto de pedal de vez en cuando para aumentar la tensión. Use la técnica ancestral de la respuesta de llamada entre dos instrumentos diferentes.

1

Aunque generalmente está diseñado para trabajar en secuencias más largas que una barra, el encadenamiento de Markov es una forma simple y efectiva de generar música similar a su entrada. Para un ejemplo escrito en Python usando RTcmix para la generación de audio, vea mi implementación here.

Se basa en el capítulo de encadenamiento de Markov de Notas del Metalevel, un excelente texto sobre la composición algorítmica.

Cuestiones relacionadas