Ritmos euclidianos y divisibilidad en la música algorítmica

Introducción

A la fecha existe una vasta literatura acerca de música-matemáticas y música algorítmica. Patterns of intuition (ver 1.), por ejemplo, es un compendio de ensayos de diversos autores, entre los que destacan David Cope, Guerino Mazzola o Peter Lackner. El primero se ha centrado en estudiar por medio de la inteligencia artificial, la recreación del estilo musical. El segundo, pianista y matemático, ha desarrollado modelos topológicos para el contrapunto de Bach o el serialismo de Pierre Boulez. El tercero, Lackner, fue un compositor quien junto al matemático Harald Fripertinger estudió la teoría de grupos aplicada a la música para luego desarrollar composiciones atonales, entre las que destaca Kanon für Klavierautomat, pieza original ejecutada por un piano mecánico.

En otra vertiente, la historia de los lenguajes de programación musicales data desde 1957, cuando apareció MUSIC I de Max Matthews. Le siguieron MUSIC II-MUSIC IV, MUSIC 360 y MUSIC11 (ver 2.). Desde MUSIC III, Csound comparte características con estos programas antecesores, si bien Csound es uno entre muchos lenguajes de programación musicales que actualmente existen para computadora personal, entre ellos SuperCollider, PureData, Max/Msp, etc.

La primera composición musical hecha en su totalidad por una computadora fue Illiac Suite (Hiller, Isaacson, 1957), que hacía uso de cadenas de Markov.

Otras personas argumentarían que en música algorítmica también es importante considerar al algoritmo de Guido D’Arezzo (hacia el año 1026),1 al Telarmonio de 1906 (primer instrumento electrónico), o al sintetizador MARK II (del año 1950);2 y que desde la antigua Grecia, pasando por Bach, Ligeti, o Xenakis, reconocidos compositores, se ha relacionado a la música con las matemáticas, inherentemente a la conceptualización de sus obras o como la metodología en sus composiciones.3 Actualmente, el estado del arte en computación musical en el 2022 se orienta hacia la optimización de audio en tiempo real, el live coding, la música en red, el machine learning musical, la música en web, la generación de material audiovisual o el hardware siendo controlado desde la programación musical.4 Es difícil que la persona interesada en música algorítmica quede exenta de alguno de estos temas, pues ellos están interrelacionados.

Godfried Tussaint (1944-2019), computólogo especializado en geometría computacional pero también percusionista, en el artículo The distance geometry of music demostró la relación manifiesta entre el algoritmo euclidiano con varios ritmos tradicionales del mundo (africanos, cubanos, hindúes, entre otros).5 En resumen, este algoritmo es capaz de generar una colección de ritmos equitativamente distribuidos y que, según Tussaint, esta propiedad es característica de aquéllos ritmos muy agradables para el común denominador de la gente.6 Un ritmo euclidiano puede ser generado para cualquier pareja de números enteros, pudiendo éstos ser o no primos relativos.

Alex McLean realizó la programación exacta del algoritmo de Tussaint en Tidalcycles (lenguage de live coding),7, hecho que permite corroborar el poder musical que tiene este algoritmo en el live coding, primeramente porque pueden realizarse improvisaciones de música algorítmica que hagan uso de estos ritmos, encadenándolos, sobrelapándolos e intercambiándolos a grandes velocidades, lo que podría ser difícil y hasta imposible para algunos percusionistas.

A continuación explicaré qué es el algoritmo de Euclides y el algoritmo de Tussaint, mostraré ejemplos sonoros de ritmos euclidianos, y explicaré cómo emplearlos en composiciones musicales, usándolos como timelines y/o como método de orquestación.

El algoritmo de Euclides

El algoritmo de Euclides permite calcular el Máximo Común Divisor de dos números, así como determinar si dos números son primos relativos. Para hablar de algoritmo de Euclides, primero hay que conocer el algoritmo de la división. El algoritmo de la división dice que, dados dos enteros $a$ y $b$, siempre existen enteros $q$, $r$ tales que $a = bq + r$, con $0 \leq r < b\text{.}$ Por ejemplo, para $a = 14$ y $b = 8\text{,}$

$$ 14 = 8(1) + 6 \text{.}$$

Geométricamente, el algoritmo de la división nos dice qué tan lejos está un número de dividir exactamente a otro número.

Ya con esto entendimos el algoritmo de la división. Recordemos ahora que el máximo común divisor de dos números $a$ y $b$, es el mayor entero $d$ que es divisor común de $a$ y $b\text{.}$

Ejemplo. Ya que los divisores comunes de $14$ y $8$ son $\{1,2\},$ El $MCD(14,8) = 2.$

Cuando los números $a$ y $b$ son pequeños es posible enlistar todos los divisores y encontrar el divisor común. Alternativamente, se usa el algoritmo de Euclides para encontrar el MCD de 2 números. El algoritmo de Euclides consiste en calcular varios algoritmos de la división, (reduciéndose el par de números con cada iteración) y después de una cadena finita de operaciones se obtendrá un residuo igual a cero que termina el procedimiento. El último residuo no cero en la cadena de divisiones es el máximo común divisor.

Ejemplo. Usando el algoritmo de Euclides calcula el $MCD(14,8),$

$$14 = 8(1) + 6$$

$$8 = 6(1) + 2$$

$$6 = 6(1) + 0.$$

Como el último residuo distinto de cero es $2,$ $MCD(14,8) = 2.$8

Versión musical de Tussaint del algoritmo de Euclides

Para el caso de la generación de ritmos, el algoritmo de Euclides servirá para empaquetar cadenas binarias de números, y tras una serie de pasos, podrá encontrarse el ritmo euclidiano correspondiente. Veamos un ejemplo más específico.

Dados dos números $a$ y $b,$ el número $a$ representará “número de pulsos por unidad de tiempo”, y el número $b$ significará “número de golpes (u onsets) por unidad de tiempo.”

Para $a = 14$ y $b = 8,$ de todas las posibles maneras de distribuir $8$ golpes en $14$ pulsos, sólo hay una que resulta de emplear el algoritmo euclidiano.

Ejemplos de ritmos no euclidianos son:

$$00110110110011$$
$$10011001011101$$
$$10101010101101$$

Encuentra el ritmo euclidiano E(8,14).

Como #$p = 14,$ #$o = 8,$ habrán $14 \enspace – \enspace 8 = 6$ ceros y $8$ unos. Al iniciar el algoritmo, comenzamos por colocar los unos y después los ceros:

$$[[1][1][1][1][1][1][1][1][0][0][0][0][0][0]]$$

Luego se distribuyen los ceros en los paquetes que ya tenían uno:

$$[[10][10][10][10][10][10][1][1]]$$

Esto se corresponde con que $8/6$ es $8 = 6(1) + 2;$ se obtuvieron $6$ paquetes de $2$ bits, y sobraron $2$ paquetes de $1$ bit.

Esto termina el algoritmo de Euclides. Como en este caso los números no son primos relativos, continúa otro procedimiento adicional para encontrar el ritmo euclidiano correspondiente.

Ya que $8 = 2(4),$ se distribuirán los paquetes en cuatro cajas:

$$[[101][101][1010][1010]]$$

Luego se reordenarán para que queden alternados:

$$[[101][1010][101][1010]]$$

Por último se formará el patrón resultante al sacar los bits de sus cajas:

$$10110101011010$$

Escuchar el resultado en TidalCycles:

d1 $ s "bd:4(8,14)"
d2 $ s "hh*14"
d3 $ s "ht"

Y con variación de tempo:

p "cpsfun" $ stack [ s "bd:4(8,14)" # gain "0.9",s "hh*14",
s "ht"] # cps (slow 8 $ 0.5 + saw)

Un ejemplo donde se puede ver qué ocurre cuando el par de números elegidos son primos relativos se puede consultar en “Real World Algorithms. A begginer’s guide”.9 Musicalmente, contar 14 tiempos por unidad ya es extraño, porque la cantidad de pulsos es grande. Es más común contar 7 tiempos y hacer subdivisiones. Lo que podría equivaler a un compás de 7/8; ya que en 7/8 se pueden agrupar hasta 14 dieciseisavos (o en 7/4 se pueden agrupar hasta 14 octavos por compás). La elección de compás realmente depende de cómo piensa la música un músico, de sus habilidades y del contexto. 7/8 sigue siendo una métrica poco común para un compás, que se puede encontrar en piezas de rock progresivo (“Frame by Frame” – King Crimson), música celta (“The fruit and the snoot” – Liz Caroll), Stravinsky (“La consagración de la primavera”), talas hindús, entre otros.

En el sentido de que es muy fácil automatizar ritmos euclidianos, esto presenta una ventaja para la música algorítmica, ya que los resultados producidos serán difícilmente emulables en las percusiones análogas.

Timelines

El timeline es la pauta rítmica a la que se atiene una agrupación de músicos; suena durante toda o casi toda una pieza sin realmente desaparecer. Se diferencia del pulso en que acentúa únicamente ciertos golpes, pero la elección de estos determina la base rítmica de una pieza o inclusive la de todo un género musical. En el clave-son, es el instrumento de la clave (dos percusiones de madera que se golpean entre sí para producir sonido) el que marca el timeline (ver 9.).

Bibliografía

  1. Nierhaus, G. (Ed.). (2015). Patterns of intuition: Musical creativity in the light of algorithmic composition. Springer.
  2. Lazzarini, V., Yi, S., Heintz, J., Brandtsegg, Ø., & McCurdy, I. (2016). Csound: A sound and music computing system. Springer.
  3. Loy, G. (2011). Musimathics, Volume 1: The Mathematical Foundations of Music (Vol. 1). MIT press.
  4. Nierhaus, G. (2009). Algorithmic composition: paradigms of automated music generation. Springer Science & Business Media.
  5. Chadabe, J. (1997), Electric Sound: The Past and Promise of Electronic Music. Prentice-Hall.
  6. Edwards, M. (2011). Algorithmic composition: computational thinking in music. Communications of the ACM, 54(7), 58-67.
  7. Demaine, E. D., Gomez-Martin, F., Meijer, H., Rappaport, D., Taslakian, P., Toussaint, G.T., … & Wood, D. R. (2009). The distance geometry of music. Computational geometry, 42(5), 429-454.
  8. McLean, A. (2014, September). Making programming languages to dance to: live coding with tidal. In Proceedings of the 2nd ACM SIGPLAN international workshop on Functional art, music, modeling & design (pp. 63-70).
  9. Toussaint, G. T. (2019). The geometry of musical rhythm: what makes a” good” rhythm good?. CRC Press.
  10. Dean, R. T. (2018). The Oxford handbook of algorithmic music. Oxford University Press.
  11. Johnston, B. L., & Richman, F. (2020). Numbers and symmetry: an introduction to algebra. CRC Press.
  1. Ver 3. y 4.
  2. Ver 5.
  3. Consultar 6.
  4. Ver 10.
  5. Ver 7.
  6. Ver 9.
  7. Consultar 8.
  8. En 11 se puede consultar una demostración de los algoritmos de la división y de Euclides.
  9. En https://louridas.github.io/rwa/assignments/musical-rhythms/ .
Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *