Hola,

Siguiendo el consejo de Jose Manuel y como lo prometido es deuda,


> También hablas de algoritmos caóticos y de matemáticas en tus
> mensajes; de azar y probabilidad. La Teoría del Caos  -y la
> Matemática, aún más- es demasiado amplia como para considerarla en su
> totalidad en un contexto de creación o investigación. No se puede
> emplear toda de golpe. Conviene escoger un algoritmo y ver qué ocurre
> en un contexto dado. Por ejemplo, el proceso de Verhulst, uno de los
> más simples de toda la Teoría del Caos, puede generar sorprendentes
> series de notas cuando  lambda se acerca a 4 
> 
> x(i+1) = x(i) · (1-x(i)) · lambda
> 
> 

Paso a ustedes el código de SuperCollider para el proceso de Verhulst
que realmente es simple de implementar. Debería funcionar así no mas,
copiando y pegando. Lo adicional a este código es que como sonido,
instrumento o, sintetizador, escogí el modelo de cuerda pulsada de
Karplus-Strong porque con éste es fácil de notar cambios.

El proceso de Verhulst en este caso esta mapeado a valores de notas
MIDI. Esto se realiza en el "Task t", de este código de SuperCollider.
Las duraciones (o ritmo), se escogen de valores aleatorios entre 1 y 7.5
décimas de segundo.

Quizá lo mas dificil de entender es la ecuación donde se obtiene el
valor de "midinote". Esto simplemente es un proceso de normalización con
máximos y mínimos.

Ojalá lo puedan probar y se esperan comentarios. Ensayen con diferentes
lambdas.

  Suerte,

  --* Juan


/*
***********************************************************************************
*        SimVerhulst.sc
*
*        (c) 2010 Juan Reyes / juanig_at_CCRMA
*        Codigo para demostrar el proceso de Verhulst.
*        Por sugerencia de Jose Manuel Berenguer en expyeZp:
*        
*        "puede generar sorprendentes series de notas cuando lambda *
lambda se acerca a 4"
*        
*
*        Ecuacion:      
*           x(i) = x(i-1) (1 - x(i-1)) lambda
*
*
************************************************************************************/



s = Server.default.boot;

//SynthDef (Cuerda pulsada de Karplus Strong)
//--------------------------------------

(
SynthDef("kspluck",
        {
                // Definir argumentos y variables
                arg  amp=0.5, freq=440, fcoeff=0.5,
                decayt=1.0;
                var signal;
                // Senal
                signal = Pluck.ar(
                        WhiteNoise.ar(0.1),   // Señal de Excitacion
                        Impulse.kr(0),        // Disparar
                        freq.reciprocal,      // Max retardo
                        freq.reciprocal,      // Duración retardo
                        decayt,               // Duración decay
                        fcoeff,               // Coeficientes filtros
                        amp     );            // Mul
                Out.ar([0,1], signal);
        }).load(s)
)

SynthDescLib.global.read;

// Para probar nuestro instrumento de cuerda pulsada:
//-------------------

~plucked =  Synth("kspluck", [\freq, 440, \fcoeff, 0.5]);
~plucked =  Synth("kspluck", [\freq, 600, \fcoeff, 0.45]);
~plucked =  Synth("kspluck", [\freq, 500, \fcoeff, 0.45, \decayt, 7]);

//
// Ahora el task con el proceso de Verhulst Task::
//------------------------------------------------------------------------
//

// Escoger primero a "~lambda": condiciones iniciales:

~lambda = 3.97; // Melodia Caotica (a la Cowell)
~lambda = 3.65; // Melodia Cuasi periodica
~lambda = 3.05; // Melodía algo periodica (minimalista)

// Para correr el Task con la sucesion de notas
// ----------------------------

(
t = Task({
        var x =0.75, lambda = ~lambda;
        var frq = 600,  newx, midinote;
        {Synth("kspluck",
                [
                        \freq, frq,
                        \fcoeff, 0.475,
                        \decayt, 1.25
                ]
        );
                newx =((1-x)*x)*lambda;     // **-Ecuacion Verhulst-** 
                x = newx;
                midinote = ((x + 0.45)/2.0 * 127.0 + 0.5).floor;
                frq = midinote.midicps;
                (0.1+0.75).rand.wait;
        }.loop;
}).play(SystemClock)
)



/*
***********************************************************************************
************************************************************************************/

_______________________________________________

Expyezp mailing list
[email protected]
http://lists.slow.tk/listinfo.cgi/expyezp-slow.tk

Archivo de mensajes:
http://lists.slow.tk/pipermail/expyezp-slow.tk/

Responder a