Herramientas generativas al servicio de la composición musical

Arrays

Para algunos lenguajes de programación usamos Arrays de valores para describir la presencia y ausencia de eventos musicales tenemos varias aproximaciones:

Arrays Multidimensionales

Ventajas

Permiten extraer cada array conservando las cualidades de array

Desventajas

Son difíciles de escribir y es difícil la lógica para acceder a sus elementos, tienen que ser del mismo tipo, si un valor es flotante los otros arrays deben definirse como flotantes y el primer elemento debe estar un flotante

Definición

[[[0.0,0,1,0],[0.5, 0.5, 0,25, 1.0],[0.0,4, 8, 12]]] @=> float multi[][][];

Acceso

Arrays con Tuplas

Definición

[(60,0.25,1),(62,0.125,1),(64,0.125,1)] @=> Tuplas array[];

Ejemplos

Tuples.ck

——–

Probabilidad

Cadenas de Markov

vía @danielgomezmarin : Podemos usar las Cadenas de Markov 1) Markov chains Wikipedia para tener una mejor distribución de probabilidades de variaciones de un ritmo. Analizamos un “Corpus” una serie de canciones del genero a estudiar, de allí sacamos la presencia de los golpes de percusión en una división de, digamos , 16 pasos eso nos da una probabilidad resultante para cada uno de los 16 pasos

Un ejercicio es tener cuatro o cinco ritmos monofónicos (como claves ) dibujados en un papel cuadriculado en dond een el eje x se tiene el tiempo (en steps) y en el eje y se tiene una x si hay golpe y nada si hay un silencio. Se apilan todos los ritmos uno sobre otro. una vez se tengan así dibujados se puede hacer una sumatoria manual por cada step. Pensando “¿cuantos golpes hay en este step?” y así sucesivamente se llena un histograma para todos los steps manualmente. Este sería un primer paso de análysis muy didáctico para entender cómo se pueden analizar un corpus de ritmo de una manera muy simple. Una vez entendido se puede programar mas facilmente. unos rimos monofónicos que todos tengan duración de 1 compás. Por ejemplo varias claves africanas (http://www.ethanhein.com/wp/wp-content/uploads/2013/12/maximally-even.png) con estas claves podés calcular el histograma para cada step. Luego al normalizar (dividir la suma de cada step por la cantidad total de ritmos) podés tener unas probabilidades que te servirán para generar automáticamente claves africanas basadas en el corpus que te propongo. Decime si te parece bien

essteban 20:14 hola gente, como ya el habia dicho a fede, ya tenia transcritos en arrays unos 20 ritmos completos, kick, snare y hh, asi que avanzé con eso, como hacer esto de manera automatica ?? danielgomezmarin 01:53 Hola esteban. Para que funciones debes separar los 20 patrones de kicks y hacer la sumatoria que hablamos arriba, lo mismo con los 20 snares, etc. Así quedas con 4 tablas de probabilidad paralelas. Propongo que antes de automatizar el proceso (que puede tomar un tiempo para programar y que desvía la atención de lo interesante) se usen los resultados de las 4 tablas y se introduzcan 'a mano'. Es decir, escribir directamente dentro de 4 arrays los valores que han resultado después de apilar, sumar y normalizar. danielgomezmarin 02:03 Recordemos que cada tabla representa la 'el conocimiento' o 'la inteligencia' que tenemos sobre el ritmo de cada instrumento y se presenta en la forma de probabilidades. Por ejemplo, en este step tengo x probabilidad de que suene un snare. Con simplemente lanzar un dado (generar un número aleatorio en ese step) y compararlo con la tabla de probabilidad para el snare en ese step puedo decidir si el instrumento suena o no.

Herramientas

Función que toma como argumentos un porcentaje y un valor deseado, y devuelve valor resultante de la probabilidad de la aparición del valor deseado o cero generator.ck

Extractor rudimentario que toma un audio lo divide en 16 partes y devuelve cero o uno según exista un nivel en un rango de frecuencias que sobrepase un umbral extractFromAudio.ck