music procedural generative

music - Técnicas procesales de generación de música



procedural generative (19)

¿Has echado un vistazo a SoundHelix (http://www.soundhelix.com)? Es un marco de código abierto de Java para la creación de música aleatoria algorítmica que produce música bastante clara. Puede usar SoundHelix como una aplicación independiente, como un applet incrustado en una página web, como un applet basado en JNLP o puede incluirlo en su propio programa Java.

Los ejemplos generados con SoundHelix se pueden encontrar aquí: http://www.soundhelix.com/audio-examples

He estado pensando mucho en la generación de contenido de procedimientos por un tiempo y nunca he visto mucha experimentación con la música de procedimiento. Tenemos fantásticas técnicas para generar modelos, animaciones, texturas, pero la música sigue siendo completamente estática o simplemente bucles en capas (por ejemplo, Spore).

Debido a eso, he estado pensando en técnicas óptimas de generación de música, y tengo curiosidad sobre lo que otras personas tienen en mente. Incluso si no lo ha considerado previamente, ¿qué cree que funcionará bien? Una técnica por respuesta, por favor, e incluya ejemplos donde sea posible. La técnica puede usar datos existentes o generar la música completamente desde cero, tal vez en algún tipo de entrada (estado de ánimo, velocidad, lo que sea).


Allá por finales de los 90, Microsoft creó un control ActiveX llamado "Interactive Music Control" que hacía exactamente lo que usted buscaba. Desafortunadamente, parecen haber abandonado el proyecto.




El libro Algorithmic Composition es un buen recorrido por los diversos métodos utilizados:

"Los temas tratados son: modelos de Markov, gramáticas generativas, redes de transición, caos y auto-similitud, algoritmos genéticos, autómatas celulares, redes neuronales e inteligencia artificial".

Es un buen punto de partida sobre este amplio tema, sin embargo, nunca describe en profundidad cómo funciona cada método. Proporciona una buena visión general de cada uno, pero no será suficiente si aún no tiene conocimiento de ellos.


El sistema más exitoso probablemente combinará varias técnicas. Dudo que encuentres una técnica que funcione bien para la generación de melodías, armonía, ritmo y bajo en todos los géneros musicales.

Las cadenas de Markov , por ejemplo, son adecuadas para la generación de secuencias melódicas y armónicas. Este método requiere el análisis de canciones existentes para construir las probabilidades de transición de cadena. La verdadera belleza de las cadenas de Markov es que los estados pueden ser lo que quieras.

  • Para la generación de melodías, pruebe los números de notas relativas a las teclas (por ejemplo, si la clave es C menor, C sería 0, D sería 1, D # sería 2 y así sucesivamente)
  • Para la generación de armonía, intente una combinación de números de nota relativa clave para la raíz del acorde, el tipo de acorde (mayor, menor, disminuido, aumentado, etc.) y la inversión del acorde (raíz, primer o segundo)

Las redes neuronales se adaptan bien a la predicción de series de tiempo (previsión), lo que significa que son igualmente adecuadas para ''predecir'' una secuencia musical cuando se entrena contra melodías / armonías populares existentes. El resultado final será similar al del enfoque de la cadena de Markov. No puedo pensar en ningún beneficio sobre el enfoque de la cadena de Markov que no sea la reducción de la huella de memoria.

Además del tono, necesitará duración para determinar el ritmo de las notas o acordes generados. Puede optar por incorporar esta información en los estados de la cadena de Markov o en las salidas de red neuronal, o puede generarla por separado y combinar las secuencias independientes de tono y duración.

Los algoritmos genéticos se pueden usar para desarrollar secciones rítmicas. Un modelo simple podría usar un chromosome binario en el que los primeros 32 bits representan el patrón de un bombo, los segundos 32 bits por caja, los terceros 32 bits, un hi-hat cerrado y así sucesivamente. La desventaja en este caso es que requieren retroalimentación humana continua para evaluar la aptitud de los patrones recientemente evolucionados.

Se puede usar un sistema experto para verificar las secuencias generadas por las otras técnicas. La base de conocimiento para tal sistema de validación puede ser levantada de cualquier buen libro o sitio web de teoría musical. Prueba la musictheory.net Ricci Adams.


Hay más de 50 años de investigación en estas técnicas, a menudo ignoradas por los desarrolladores que no están familiarizados con la historia de la música de la computadora y la composición algorítmica. Numerosos ejemplos de sistemas e investigaciones que abordan estos problemas se pueden encontrar aquí:

http://www.algorithmic.net


He estado buscando hacer esta propuesta de proyecto - "8.1 " del grupo de investigación "Teoría y praxis en el lenguaje de programación" de la Universidad de Copenhague - departamento de CS:

8.1 Cosecha Automatizada y Análisis Estadístico de Corpora de Música

El análisis tradicional de la partitura se compone de una o más personas que analizan el ritmo, las secuencias de acordes y otras características de una sola pieza, en el contexto de una comparación a menudo vaga de otras piezas del mismo compositor u otros compositores del mismo período.

El análisis automatizado tradicional de la música apenas ha tratado la partitura, pero se ha centrado en el análisis de señales y el uso de técnicas de aprendizaje automático para extraer y clasificar, por ejemplo, el estado de ánimo o el género. Por el contrario, la investigación incipiente en DIKU tiene como objetivo automatizar partes del análisis de la partitura. El valor agregado es el potencial para extraer información de grandes volúmenes de partituras que no pueden hacerse fácilmente a mano y no pueden analizarse de manera significativa mediante técnicas de aprendizaje automático.

Esto, como yo lo veo, es la dirección opuesta de su pregunta, los datos generados, imagino, podrían usarse en algunos casos de generación de música procesal.


He estado trabajando en un módulo de Python para música de procedimiento. Acabo de programar lo que sé sobre notas, escalas y construcción de acordes, y luego he podido dejar que genere aleatoriamente contenido a partir de esas restricciones. Estoy seguro de que hay más teoría y patrones que un sistema como ese podría ser enseñado, especialmente por alguien que entiende mejor el tema. Luego puede usar esos sistemas como restricciones para algoritmos genéticos o generación de contenido aleatorio.

Puede revisar mi implementación here , especialmente el ejemplo de lead generado aleatoriamente puede ser útil para usted. Alguien con una sólida comprensión de las progresiones de acordes podría crear una estructura de canción a partir de técnicas como esa e implementar melodías aleatorias restringidas como esta sobre ella. Mi conocimiento de la teoría musical no se extiende tan lejos.

Pero, básicamente, necesitarás codificar la teoría del tipo de música que quieres generar, y luego usar eso como una restricción para algún algoritmo que explore el rango de esa teoría.


La investigación sobre la generación de música procedimental no aburrida data de hace mucho tiempo. Navegue por los números antiguos y nuevos de Computer Music Journal http://www.mitpressjournals.org/cmj (¿no tiene un nombre de dominio real?). Tiene artículos técnicos serios de uso real para usuarios de síntesis de música, jinetes de soldaduras, bit pastores e investigadores académicos. No es una revisión esponjosa y entrevistas de trapo como varias de las revistas que puedes encontrar en las principales librerías.


La técnica específica que describes es algo en lo que Thomas Dolby estuvo trabajando hace diez o quince años, aunque ahora no recuerdo cómo lo llamó, así que no puedo darte un buen término de búsqueda.

Pero vea this artículo de Wikipedia y this página de Metafilter.


La técnica que he estado considerando es crear pequeños patrones musicales, hasta una barra más o menos. Etiquete estos patrones con identificadores de sentimientos como "emoción", "intenso", etc. Cuando desee generar música para una situación, elija algunos patrones basados ​​en estas etiquetas y elija un instrumento con el que quiera jugar. Con base en el instrumento, descubra cómo combinar los patrones (por ejemplo, en un piano puede tocarlo todo junto, dependiendo del lapso de la mano, en una guitarra puede tocar las notas en sucesión rápida) y luego procesarlo en PCM . Además, puede cambiar la clave, cambiar la velocidad, agregar efectos, etc.


Mi opinión es que la música generativa solo funciona cuando atraviesa un riguroso proceso de selección. David Cope, un pionero de la música algorítmica, atravesaría horas de producción musical a partir de sus algoritmos (que creo que se basaron en su mayoría en la cadena de Markov) para seleccionar los pocos que realmente resultaron bien.

Creo que este proceso de selección podría automatizarse modelando las características de un estilo musical particular. Por ejemplo, un estilo "disco" otorgaría muchos puntos a una línea de bajo que incluye ritmos incobrables y partes de batería con trampas en los tiempos posteriores, pero resta puntos para armonías fuertemente disonantes.

El hecho es que el proceso de composición musical está lleno de tantas prácticas idiomáticas que son muy difíciles de modelar sin un conocimiento específico del campo.




Siempre me han gustado los viejos juegos de Lucasarts que usaban el sistema iMuse, que producía una banda sonora reactiva e interminable para el juego y era muy musical (porque la mayoría de ellos seguía siendo creada por un compositor). Puede encontrar las especificaciones (incluida la patente) aquí: http://en.wikipedia.org/wiki/IMUSE

Nintendo parece ser la única compañía que todavía usa un enfoque similar a iMuse para crear o influenciar la música sobre la marcha.

A menos que su proyecto sea muy experimental, no abandonaría el uso de un compositor: un compositor humano real producirá resultados mucho más musicales y escuchables que un algoritmo.

Compáralo con la escritura de un poema: puedes generar fácilmente poemas no-sonos que suenan muy vanguardistas, pero replicar a Shakespeare con un algoritmo es difícil, por decirlo suavemente.


Un algoritmo fácil y algo efectivo es usar 1 / f noise también conocido como "ruido rosa" para seleccionar duraciones y notas de una escala. Esto suena como música y puede ser un buen punto de partida.

Un mejor algoritmo es usar "cadenas de markov" ... escanear algunos ejemplos de música y crear una tabla de probabilidades. En el caso más simple, sería algo así como que C tiene un 20% de posibilidades de seguir a A. Para que esto sea mejor, observe la secuencia de las notas anteriores, por ejemplo, "CAB" tiene un 15% de probabilidad de ser seguido por B, y 4% de probabilidades de ser seguido por un Bb, etc. Luego, simplemente elija notas usando las probabilidades de las notas elegidas previamente. Este algoritmo notablemente simple genera muy buenos resultados.

Cadenas de Markov para la generación de música


Un tema tan grande Puede echar un vistazo a mi aplicación para iPad, Thicket o mi software Ripple en morganpackard.com. En mi experiencia, la mayoría de los enfoques académicos para la generación de música dinámica presentan cosas que suenan, bueno, académicas. Creo que las cosas más exitosas se encuentran en los márgenes del mundo de club / electronica. Monolake es mi héroe a este respecto. Cosas muy escuchables, muy generadas por computadora. Mi propia música tampoco está mal. El "Libro del alfabeto" de Paul Lansky es un buen ejemplo de música algorítmica extremadamente escuchable, especialmente teniendo en cuenta que es un chico académico.


Mi software usa la teoría evolutiva aplicada para "hacer crecer" la música. El proceso es similar al programa The Blind Watchmaker de Richard Dawkins: MusiGenesis agrega elementos musicales al azar y luego el usuario decide si conserva o no cada elemento agregado. La idea es mantener lo que te gusta y abandonar lo que no suena bien, y no tienes que tener ningún entrenamiento musical para usarlo.

La interfaz explota, pero ya es vieja. Sándame.