[chuck-users] apropos jcr paradox
Juan Reyes
juanig at ccrma.stanford.edu
Tue Mar 21 15:41:50 EDT 2017
Hi,
Remembering Jean Claude Risset. Just thought I'll share my take on the
glissandi paradox. -- Juan Reyes.
//* ******************************************************************
//*
//* Risset's paradox aka Shepard Tone
//* (see Dodge's Elements of CM pp-94-96)
//*
//* This take Juan Reyes, 03/08/2017
//*
//*
//* Toggle values: baseFreq and baseDur
// sample rate
1::second / 1::samp => float srate;
// 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;
}
More information about the chuck-users
mailing list