1 #ifndef _DynamicSource_h 2 #define _DynamicSource_h 4 #include "synthfunctions.h" 9 class DynamicTableSource :
public IWavetableSource
14 memset(wavetableSet, 0, NUM_MIDI_NOTES*(
sizeof(Wavetable*)));
18 ~DynamicTableSource() { }
20 virtual const char* getWaveformName()
22 return selectedTable->waveformName;
26 inline virtual void selectTable(uint32_t midiNoteNumber)
28 selectedTable = wavetableSet[midiNoteNumber];
32 inline virtual double readWaveTable(
double oscClockIndex)
35 double wtData[2] = { 0.0, 0.0 };
38 double wtReadLocation = selectedTable->tableLength * oscClockIndex;
41 double dIntPart = 0.0;
42 double fracPart = modf(wtReadLocation, &dIntPart);
43 uint32_t readIndex = (uint32_t)dIntPart;
44 uint32_t nextReadIndex = (readIndex + 1) & selectedTable->wrapMask;
47 wtData[0] = selectedTable->table[readIndex];
48 wtData[1] = selectedTable->table[nextReadIndex];
51 double output = doLinearInterpolation(0.0, 1.0, wtData[0], wtData[1], fracPart);
54 return selectedTable->outputComp * output;
58 virtual uint32_t getWaveTableLength() {
return selectedTable->tableLength; }
60 void addWavetable(Wavetable* table, uint32_t midiNoteNumber)
62 if (midiNoteNumber >= NUM_MIDI_NOTES)
return;
63 if (wavetableSet[midiNoteNumber])
64 delete wavetableSet[midiNoteNumber];
66 wavetableSet[midiNoteNumber] = table;
67 selectedTable = table;
72 Wavetable* wavetableSet[NUM_MIDI_NOTES];
73 Wavetable* selectedTable =
nullptr;
Definition: analogegcore.cpp:4