El Algoritmo de Euclides genera ritmos musicales

#1 por Abird el 11/05/2011
Se trata de la traducción de un artículo bastante interesante que relaciona los ritmos étnicos y no sólo éstos, con el algoritmo de Euclides. El documento de Godfried Toussaint ofrece un rigor científico preciso a la vez que muestra una amplia gama de ejemplos. He pensado que podría ser interesante y he decidido subirlo como doc. adjunto (pdf).

Un saludo

http://www.myspace.com/abird2009
http://aprendemusica.abird.es iniciación a la musica electrónica

Subir
#2 por computerneix el 14/05/2011
Muy interesante.

Un par de implementaciones de este artículo:

http://www.fredrikolofsson.com/f0blog/?q=node/434

http://ruinwesen.com/blog?id=216

"Dale ritmo a tu algoritmo"

http://musicnumbers.wordpress.com/nxreleases/

Subir
#3 por ignasi el 19/08/2011
Encontrado por ahí, el código en (parece) javascript (he sustituido los signos > y < por "mayor que" y "menor que" pues parece que el editor de los foros no quiere esos caracteres ¿?):

//Euclidean rythms

var steps = 16;
var attacks = 3;
var rests = steps – attacks;
var per_attack =parseInt(rests/attacks);
var rem = rests % attacks;

//check args – attacks must steps) {
attacks = steps;
}

var rhythm = new Array();
var i = 0;
var j = 0;

while(i "menor que" attacks) {

rhythm[j] = 1;
j++;

for(var k=0;k "menor que" per_attack;k++)
{
rhythm[j]=0;
j++;
}

if(i "mayor que" rem)
{
rhythm[j]=0;
j++;
}

i++;

}
Subir
#4 por ignasi el 19/08/2011
otra versión :


function euclid(steps, pulses)
{

var r = new Array();

if (pulses > steps)
{ //test for input for sanity
post(“Error: too many pulses for steps, truncating to step number\n”);

for (i = 0; i = pulses)
{ //first case more pauses than pulses
per_pulse = Math.floor(pauses / pulses);
remainder = pauses % pulses;
for (i = 0; i < pulses; i++)
{
r.push(1);
for (j = 0; j < per_pulse; j++)
{ r.push(0); }
if (i < remainder)
{ r.push(0); }
}

} else { //second case more pulses than pauses

per_pause = Math.floor( (pulses – pauses) / pauses);
remainder = (pulses – pauses) % pauses;

for (i = 0; i < pauses; i++)
{
r.push(1);
r.push(0);

for (j = 0; j < per_pause; j++)
{
r.push(1);
}

if (i < remainder)
{
r.push(1);
}
}

}

}

return r;

}
Subir
#5 por Endre el 19/08/2011
Gracias, ignasi.
Subir
#6 por ignasi el 22/08/2011
de nada... creo que la primera versión está mal. La buena es la segunda.
Subir
Respuesta rápida

Regístrate o para poder postear en este hilo