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
  • -34%
    ¡Liquidación de AKG Lyra!
    89 €
    Ver oferta
  • Presonus StudioLive 16.0.2 USB
    925 €
    Ver oferta
  • Monitores JBL 104-BT en blanco
    129 €
    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
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
Nuevo post

Regístrate o para poder postear en este hilo