El Algoritmo de Euclides genera ritmos musicales

Abird
#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
Archivos adjuntos ( para descargar)
El Algoritmo de Euclides Genera Ritmos Musicales Tradicionales.pdf
Subir
OFERTASVer todas
  • -35%
    Set de grabación completo de Focusrite
    184 €
    Ver oferta
  • -40%
    ¡Precio mínimo histórico! AKAI MPK 261
    298 €
    Ver oferta
  • -21%
    Zoom H4n Pro Black
    158 €
    Ver oferta
computerneix
#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
Subir
ignasi
#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
ignasi
#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
Endre
#5 por Endre el 19/08/2011
Gracias, ignasi.
Subir
ignasi
#6 por ignasi el 22/08/2011
de nada... creo que la primera versión está mal. La buena es la segunda.
Subir
yosualogan
#7 por yosualogan el 04/01/2022
#1

Aunque ha pasado su tiempo, me ha servido de mucha ayuda el documento,

Muchas gracias Abird

Un saludo
Subir
Abird
#8 por Abird el 04/01/2022
#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
Subir
1
Epiphone
#9 por Epiphone el 11/04/2022
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)
Subir
Guillermo Cornezuelo del Centeno
#10 por Guillermo Cornezuelo del Centeno el 26/05/2022
Pues el año pasado publiqué yo un proyecto basado en superposición de secuencias euclideas, lo enlazo por aquí a ver si suscita interés y le pego un empuje. Las secuencias en sí están precompiladas, así que no veréis el algoritmo en el código, es más bien una interfaz para cargarlas y moverlas.

Desmonté el montaje provisional para soldarlo y aun lo tengo con las tripas de fuera...
https://www.hispasonic.com/foros/secuenciador-euclideo-arduino-demo-video/554945#post4812662
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo