Hola,

Paso mi toma del algoritmo de los tonos Shepard en ChucK. Como
mencionaba esta basado en Dodge C., Computer Music, pp-94-96, Schirmer
Books, 1985. En este caso solo uso diez armónicos pero en esencia lo mismo.

Para quienes enseñan 'síntesis aditiva' este es un buen ejemplo para poner de tarea. Insisto también que es interesante desde el punto de lista de percepción y psicología.

Este codigo se puede copiar en un archivo que se llame por ejemplo 'paradox.ck' y si tienen instalado ChucK, en la terminal o linea de comandos, se hace funcionar con 'chuck paradox.ck'.

  -- Juan

//* ******************************************************************
//*
//*  Risset's paradoxes aka Sheppard Tone
//*                   (see Dodge's Elements of CM pp-94-96)
//*
//* This take (c) Juan Reyes, 03/08/2017
//*

// sample rate
1::second / 1::samp => float srate;
// control rate
srate/10 => float crate;


// Function for normal curves to factor amplitude
fun float normfn (float x, float d)
{
        return Math.exp(-4.8283*(1-Math.cos(2*Math.PI*
        (x-((d*srate*0.5)-0.5))/(d*srate))));
}

// Toggle values
1000.0 => float baseFreq;
3.33 => float baseDur;
baseDur*srate => float samples;
samples/7.0 => float phaseoffs;

// Frequency Factors
[0.0, 51.2, 102.4, 153.6, 204.8, 256.0, 307.2, 358.4,
409.6, 460.8] @=> float fqFactors[];
        
// A bank of sine oscillators
SinOsc oscBank[10];

// Gains for oscillator bank
Gain gainsArr[10];

// Signal
for(0=> int i; i < oscBank.cap(); i++)
{
        baseFreq+fqFactors[i]=> oscBank[i].freq;
        oscBank[i] => gainsArr[i] => dac;
}

// Count samples
0.0 => float sx;

while( true ) {

        for (0 => int j; j < oscBank.cap(); j++)
        {
                0.25*normfn((sx+((j+1)*phaseoffs)), baseDur)
                => gainsArr[j].gain;
        }       

        if (sx > samples)
        {
                0 => sx;
        }
        else
        {
                1 +=> sx;
        }
        
        //       advance "1" sample.  
        1.0::samp => now;    
}

_______________________________________________
Expyezp mailing list
Expyezp@lists.randomlab.net
http://lists.randomlab.net/listinfo.cgi/expyezp-randomlab.net

Archivo de mensajes
-------------------

* http://www.mail-archive.com/expyezp@lists.randomlab.net/
* http://www.mail-archive.com/expyezp@lists.slow.tk/

Responder a