Main Archive Specials Wiki | FAQ Links Submit Forum


(Allmost) Ready-to-use oscillators

Type : waveform generation
References : Ross Bencina, Olli Niemitalo, ...

Notes :
Ross Bencina: original source code poster
Olli Niemitalo: UpdateWithCubicInterpolation


Code :
//this code is meant as an EXAMPLE

//uncomment if you need an FM oscillator
//define FM_OSCILLATOR

/*
members are:

float phase;
int TableSize;
float sampleRate;

float *table, dtable0, dtable1, dtable2, dtable3;

->these should be filled as folows... (remember to wrap around!!!)
table[i] = the wave-shape
dtable0[i] = table[i+1] - table[i];
dtable1[i] = (3.f*(table[i]-table[i+1])-table[i-1]+table[i+2])/2.f
dtable2[i] = 2.f*table[i+1]+table[i-1]-(5.f*table[i]+table[i+2])/2.f
dtable3[i] = (table[i+1]-table[i-1])/2.f
*/

float Oscillator::UpdateWithoutInterpolation(float frequency)
{
int i = (int) phase;

phase += (sampleRate/(float TableSize)/frequency;

if(phase >= (float)TableSize)
phase -= (float)TableSize;

#ifdef FM_OSCILLATOR
if(phase < 0.f)
phase += (float)TableSize;
#endif

return table[i] ;
}

float Oscillator::UpdateWithLinearInterpolation(float frequency)
{
int i = (int) phase;
float alpha = phase - (float) i;

phase += (sampleRate/(float)TableSize)/frequency;

if(phase >= (float)TableSize)
phase -= (float)TableSize;

#ifdef FM_OSCILLATOR
if(phase < 0.f)
phase += (float)TableSize;
#endif

/*
dtable0[i] = table[i+1] - table[i]; //remember to wrap around!!!
*/

return table[i] + dtable0[i]*alpha;
}

float Oscillator::UpdateWithCubicInterpolation( float frequency )
{
int i = (int) phase;
float alpha = phase - (float) i;

phase += (sampleRate/(float)TableSize)/frequency;

if(phase >= (float)TableSize)
phase -= (float)TableSize;

#ifdef FM_OSCILLATOR
if(phase < 0.f)
phase += (float)TableSize;
#endif

/* //remember to wrap around!!!
dtable1[i] = (3.f*(table[i]-table[i+1])-table[i-1]+table[i+2])/2.f
dtable2[i] = 2.f*table[i+1]+table[i-1]-(5.f*table[i]+table[i+2])/2.f
dtable3[i] = (table[i+1]-table[i-1])/2.f
*/

return ((dtable1[i]*alpha + dtable2[i])*alpha + dtable3[i])*alpha+table[i];
}



Comments


Added on : 14/07/10 by kathygray[ AT ]mail333[ DOT ]com
Comment :
Some time before, I really needed to buy a good house for my business but I didn't earn enough cash and couldn't buy anything. Thank God my mother suggested to take the <a href="http://bestfinance-blog.com/topics/home-loans">home loans</a> at trustworthy bank. Thence, I acted so and was satisfied with my secured loan.



Add your own comment
Comments are displayed in fixed width, no HTML code allowed!
Email:

Comment:

Are you human?



Site created and maintained by Bram
Graphic design by line.out | Server sponsered by fxpansion