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
Archivos adjuntos (
loguéate para descargar)
El Algoritmo de Euclides Genera Ritmos Musicales Tradicionales.pdf
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++;
}
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;
}
de nada... creo que la primera versión está mal. La buena es la segunda.
#1
Aunque ha pasado su tiempo, me ha servido de mucha ayuda el documento,
Muchas gracias Abird
Un saludo
#7
Sí que han pasado años, aquí sigue...
Me alegro mucho que te haya servido y que te hayas parado a dar las gracias.
Un saludo
1
Ahora que existen nuevas herramientas, es todo más sencillo. Por ejemplo con Sonic Pi que incluye una función que lo permite fácilmente.
( spread 4,7),
define :foxdot do |i,j,k= 1|
live_loop :fd do
sample 25 if (spread i,j).tick
sample sm,3,pan: (ring -0.3,0.3).look
sleep k
end
end
siendo i el numero de golpes fuertes,j el numero total de golpes, y k el valor del tiempo ( 1 negra, 0.5 corchea etc)
por ejemplo es ritmo de Money de Pink Floid
foxdot(4,7,1)