investigacion:herramientas_generativas_composicion_musica
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
investigacion:herramientas_generativas_composicion_musica [2015/08/21 11:54] – [Arrays] son0p | investigacion:herramientas_generativas_composicion_musica [2020/02/11 17:18] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Herramientas generativas al servicio de la composición musical ====== | ====== Herramientas generativas al servicio de la composición musical ====== | ||
+ | |||
+ | Exploraremos algunos caminos posibles en la generación de partes para la composición musical: | ||
+ | |||
+ | ===== Generadores de Aleatoriedad ===== | ||
+ | ==== Math.Random2() ==== | ||
+ | |||
+ | La pseudoaleatoriedad que puede generar un programa de computación se desgasta rápidamente luego de la sorpresa pues no le permite al oyente la fascinación que produce predecir un evento, la menta humana disfruta al deducir un patrón y poder predecir su comportamiento. Esta técnica entonces podría servir para introducciones, | ||
+ | ==== Aleatoriedad restringida ==== | ||
+ | === Solo notas temperadas === | ||
+ | === Solo notas de una escala === | ||
+ | === Solo notas de una escala con un intervalo máximo === | ||
+ | |||
+ | ==== Variaciones de algo conocido ==== | ||
+ | Otra aproximación es partir de una frase o ritmo conocido y hacer variaciones | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
====== Arrays ====== | ====== Arrays ====== | ||
Para algunos lenguajes de programación usamos Arrays de valores para describir la presencia y ausencia de eventos musicales tenemos varias aproximaciones: | Para algunos lenguajes de programación usamos Arrays de valores para describir la presencia y ausencia de eventos musicales tenemos varias aproximaciones: | ||
- | * Arrays Multidimensionales | + | ===== Describir una melodía con Arrays ===== |
- | | + | Hay varias aproximaciones: |
- | | + | ==== Usando |
- | * Forma de definirlo :'' | + | Con un array de tres dimensiones se puede describir la altura, la duración, y la posición. |
- | * Forma de accederlo : | + | La altura se puede referir a la nota MIDI directamente, |
- | * Arrays con objetos | + | |
- | + | ||
- | ====== | + | ===== Arrays Multidimensionales ===== |
+ | |||
+ | ==== Ventajas | ||
+ | Permiten extraer cada array conservando | ||
+ | ==== 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** | ||
+ | |||
+ | <code JAVA> | ||
+ | [[[0.0, | ||
+ | </ | ||
+ | |||
+ | **Acceso** | ||
+ | <code JAVA> | ||
+ | // acceso a cada array | ||
+ | multi[0]; //[0.0, 0,1,0] | ||
+ | multi[1]; //[0.5, 0.5, 0,25, 1.0] | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Arrays con Tuplas | ||
+ | |||
+ | ==== Ventajas ==== | ||
+ | Al igual que los arrays, cada elemento de una tupla puede ser extraído de manera independiente, | ||
+ | Tambien es importante saber que, las tuplas son Objetos, y como tales pueden ser almacenados también en arrays, con una gran ventaja, la lógica para extraer sus elementos es mucho mas simple que la de un array multidimensional de similares características. | ||
- | ===== Cadenas de Markov ===== | + | ==== Desventajas |
+ | Las tuplas no son objetos nativos del lenguaje (chucK) y deben ser definidas como una clase, esto hace que su rendimiento sea inferior. | ||
- | vía @danielgomezmarin : Podemos usar las Cadenas de Markov (( [[https://en.wikipedia.org/ | + | **Definición** |
- | Analizamos un " | + | <code JAVA> |
- | eso nos da una probabilidad resultante para cada uno de los 16 pasos | + | [(60,0.25,1),(62,0.125,1),(64,0.125,1)] @=> Tuplas array[]; |
+ | </ | ||
- | Un ejercicio es tener cuatro o cinco ritmos monofónicos | + | **Acceso** |
- | 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 | + | <code JAVA> |
+ | array[0] // (60,0.25,1) | ||
+ | array[0].x // 60 | ||
+ | array[0].y // 0.25 | ||
+ | array[0].z // 1 | ||
+ | </ | ||
+ | ==== Ejemplos ==== | ||
+ | * [[https://github.com/son0p/algo-ritmos/blob/master/test/Tuples.ck | Tuples.ck]] | ||
- | 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 | + | ==== Problemas semánticos para describir |
- | 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 | + | |
- | danielgomezmarin 02:03 | + | |
- | Recordemos que cada tabla representa la 'el conocimiento' | + | |
+ | Referencia http:// | ||
- | ---- | ||
- | ===== 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 [[https:// | ||
- | * 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 [[https:// |
investigacion/herramientas_generativas_composicion_musica.1440158072.txt.gz · Última modificación: 2020/02/11 17:17 (editor externo)