History

wavetable efficiency fixes

spiricom committed 5 years ago

Commit a899e1a2 parents c39e469 c38b5b83 files · +18 −6Browse files

Unified · Split

3 files
  1. TestPlugin/Source/MyTest.cpp +9 −1
  2. leaf/Inc/leaf-effects.h +1 −0
  3. leaf/Src/leaf-effects.c +8 −5
TestPlugin/Source/MyTest.cpp+9−1
@@ -40,6 +40,7 @@ tMBSampler sampler; · 39 unmodified lines
40 40
41const int numWavetables = 1;41const int numWavetables = 1;
42tWaveTable wavetables[numWavetables];42tWaveTable wavetables[numWavetables];
43tSimpleRetune retune;
43 44
44float gain;45float gain;
45float dtime;46float dtime;
@@ -61,7 +62,10 @@ int lastLoadedAudioSize = 0; · 15 unmodified lines
61 62
62void LEAFTest_init (float sampleRate, int blockSize)63void LEAFTest_init (float sampleRate, int blockSize)
63{64{
64 LEAF_init(&leaf, sampleRate, blockSize, memory, MSIZE, &getRandomFloat);65 LEAF_init(&leaf, sampleRate, memory, MSIZE, &getRandomFloat);
66
67 tSimpleRetune_init(&retune, 1, 100, 1200, 2048, &leaf);
68 tSimpleRetune_setMode(&retune, 1);
65 69
66// tWaveTable_init(&wt, __leaf_table_sawtooth[0], 2048, 10000.f, &leaf);70// tWaveTable_init(&wt, __leaf_table_sawtooth[0], 2048, 10000.f, &leaf);
67// tWaveTableS_init(&cwt, __leaf_table_sawtooth[0], 2048, 10000.f, &leaf);71// tWaveTableS_init(&cwt, __leaf_table_sawtooth[0], 2048, 10000.f, &leaf);
@@ -101,6 +105,10 @@ inline double getSawFall(double angle) { · 33 unmodified lines
101 105
102float LEAFTest_tick (float input)106float LEAFTest_tick (float input)
103{107{
108 tSimpleRetune_tuneVoice(&retune, 0, mtof(roundf(ftom(tSimpleRetune_getInputFrequency(&retune)))));
109 return tSimpleRetune_tick(&retune, input);
110
111
104 float out = 0.0f;112 float out = 0.0f;
105 for (int i = 0; i < fmin(loadedAudio.size(), numWavetables); ++i)113 for (int i = 0; i < fmin(loadedAudio.size(), numWavetables); ++i)
106 {114 {
leaf/Inc/leaf-effects.h+1−0
@@ -610,6 +610,7 @@ extern "C" { · 609 unmodified lines
610 610
611 tPitchShift* ps;611 tPitchShift* ps;
612 612
613 float* pdBuffer;
613 float* inBuffer;614 float* inBuffer;
614 float* outBuffer;615 float* outBuffer;
615 int bufSize;616 int bufSize;
leaf/Src/leaf-effects.c+8−5
@@ -1061,7 +1061,7 @@ void tSOLAD_initToPool (tSOLAD* const wp, int loopSize, tMempool* const mp) · 1060 unmodified lines
1061 1061
1062 w->loopSize = loopSize;1062 w->loopSize = loopSize;
1063 w->pitchfactor = 1.;1063 w->pitchfactor = 1.;
1064 w->delaybuf = (float*) mpool_calloc(sizeof(float) * w->loopSize, m);1064 w->delaybuf = (float*) mpool_calloc(sizeof(float) * (w->loopSize+1), m);
1065 1065
1066 w->timeindex = 0;1066 w->timeindex = 0;
1067 w->xfadevalue = -1;1067 w->xfadevalue = -1;
@@ -1095,7 +1095,7 @@ void tSOLAD_ioSamples(tSOLAD* const wp, float* in, float* out, int blocksize) · 27 unmodified lines
1095 {1095 {
1096 float sample = tHighpass_tick(&w->hp, in[0]);1096 float sample = tHighpass_tick(&w->hp, in[0]);
1097 w->delaybuf[0] = sample;1097 w->delaybuf[0] = sample;
1098 w->delaybuf[w->loopSize-1] = sample; // copy one sample for interpolation1098 w->delaybuf[w->loopSize] = sample; // copy one sample for interpolation
1099 n--;1099 n--;
1100 i++;1100 i++;
1101 in++;1101 in++;
@@ -1500,6 +1500,7 @@ void tSimpleRetune_initToPool (tSimpleRetune* const rt, int numVoices, float min · 398 unmodified lines
1500 r->bufSize = bufSize;1500 r->bufSize = bufSize;
1501 r->numVoices = numVoices;1501 r->numVoices = numVoices;
1502 1502
1503 r->pdBuffer = (float*) mpool_alloc(sizeof(float) * 2048, m);
1503 r->inBuffer = (float*) mpool_calloc(sizeof(float) * r->bufSize, m);1504 r->inBuffer = (float*) mpool_calloc(sizeof(float) * r->bufSize, m);
1504 r->outBuffer = (float*) mpool_calloc(sizeof(float) * r->bufSize, m);1505 r->outBuffer = (float*) mpool_calloc(sizeof(float) * r->bufSize, m);
1505 1506
@@ -1510,7 +1511,7 @@ void tSimpleRetune_initToPool (tSimpleRetune* const rt, int numVoices, float min · 4 unmodified lines
1510 1511
1511 r->minInputFreq = minInputFreq;1512 r->minInputFreq = minInputFreq;
1512 r->maxInputFreq = maxInputFreq;1513 r->maxInputFreq = maxInputFreq;
1513 tDualPitchDetector_initToPool(&r->dp, r->minInputFreq, r->maxInputFreq, r->inBuffer, r->bufSize, mp);1514 tDualPitchDetector_initToPool(&r->dp, r->minInputFreq, r->maxInputFreq, r->pdBuffer, 2048, mp);
1514 1515
1515 for (int i = 0; i < r->numVoices; ++i)1516 for (int i = 0; i < r->numVoices; ++i)
1516 {1517 {
@@ -1546,7 +1547,8 @@ float tSimpleRetune_tick(tSimpleRetune* const rt, float sample) · 29 unmodified lines
1546 float out = r->outBuffer[r->index];1547 float out = r->outBuffer[r->index];
1547 r->outBuffer[r->index] = 0.0f;1548 r->outBuffer[r->index] = 0.0f;
1548 1549
1549 if (++r->index >= r->bufSize)1550 r->index++;
1551 if (r->index >= r->bufSize)
1550 {1552 {
1551 for (int i = 0; i < r->numVoices; ++i)1553 for (int i = 0; i < r->numVoices; ++i)
1552 {1554 {
@@ -1696,7 +1698,8 @@ float* tRetune_tick(tRetune* const rt, float sample) · 143 unmodified lines
1696 r->outBuffers[i][r->index] = 0.0f;1698 r->outBuffers[i][r->index] = 0.0f;
1697 }1699 }
1698 1700
1699 if (++r->index >= r->bufSize)1701 r->index++;
1702 if (r->index >= r->bufSize)
1700 {1703 {
1701 for (int i = 0; i < r->numVoices; ++i)1704 for (int i = 0; i < r->numVoices; ++i)
1702 {1705 {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t