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/