// // Programmer: Craig Stuart Sapp // Creation Date: Mon May 5 22:57:47 GMT-0800 1997 // Last Modified: Mon May 5 22:57:44 GMT-0800 1997 // Last Modified: Wed Oct 16 20:54:56 PDT 2002 (added soundfile input) // Filename: ...sig/src/Filter/WaveTable/WaveTable.cpp // Syntax: C++ // $Smake: cc -Wall -g -c %b.cc -I../../../include && rm -f %b.o // #include "Wavetable.h" #include "SoundHeader.h" #include "SoundFileIn.h" #include #include ////////////////////////////// // // WaveTable::WaveTable // WaveTable::WaveTable(int size) { setName("WaveTable"); outputValue = 0; interp = 'L'; repeat = 0; index = 0.0; waveTable.setSize(size); brandname = FILTER; magicNumber = (double)size/getSrate(); forward(); } ////////////////////////////// // // WaveTable::~WaveTable // WaveTable::~WaveTable() { } ////////////////////////////// // // WaveTable::action // void WaveTable::action(void) { if (inputs[1] >= 0) { index += pow(2.0, inputs[0] / 12.0); } else { index -= pow(2.0, inputs[0] / 12.0); } if (index >= waveTable.getSize()) { index -= waveTable.getSize(); repeat++; } else if (index < 0) { index += waveTable.getSize(); repeat++; } if (interp == 'C') { outputValue = waveTable[(int)index]; } else { int intval = (int)index; double fract = index - intval; if (fract == 0.0) { outputValue = waveTable[(int)index]; } else { double b = waveTable[intval]; double a; if (intval != 0) { a = waveTable[intval - 1]; } else { a = waveTable[waveTable.getSize() - 1]; } outputValue = (b - a) * fract + a; } } } ////////////////////////////// // // WaveTable::getRepeat -- return the number of times the wavetable // has be cycled through. // int WaveTable::getRepeat(void) { return repeat; } ////////////////////////////// // // WaveTable::normalize // default value: maxAmp = 1.0 // void WaveTable::normalize(sampleType maxAmp) { int i; sampleType normalizer = 0; for (i=0; i normalizer) { normalizer = fabs(waveTable[i]); } } normalizer = normalizer / maxAmp; for (i=0; i anArray) { waveTable.setSize(anArray.getSize()); int i; for (i=0; i partialArray) { cerr << "Isn't implemented yet" << endl; exit(1); } ////////////////////////////// // // WaveTable::setTableRamp // default value tableSize = -1 // void WaveTable::setTableRamp(long tableSize) { if (tableSize > 0) { setSize(tableSize); } sampleType increment = 2.0/(waveTable.getSize() - 1.0); sampleType currentValue = -1.0; for (int i=0; i 0) { setSize(tableSize); } for (int i=0; i 0) { setSize(tableSize); } int i; for (i=0; i 0) { setSize(tableSize); } int i; sampleType increment; sampleType currentValue = -1.0; increment = 2.0/(waveTable.getSize()/2 - 1.0); for (i=0; i