@@ -26,6 +26,16 @@ struct PitchShifter { | |||
double freqPerBin, expct, invOsamp, invFftFrameSize, invFftFrameSize2, invPi; | |||
long fftFrameSize, osamp, i,k, qpd, index, inFifoLatency, stepSize, fftFrameSize2; | |||
static void *my_calloc(size_t _size) { | |||
// (note) same as calloc, this does not fix the noise issue in REI (edit: see below for actual fix) | |||
void *r = malloc(_size); | |||
if(NULL != r) | |||
{ | |||
memset(r, 0, _size); | |||
} | |||
return r; | |||
} | |||
PitchShifter(long fftFrameSize, long osamp, float sampleRate) { | |||
this->fftFrameSize = fftFrameSize; | |||
this->osamp = osamp; | |||
@@ -41,19 +51,19 @@ struct PitchShifter { | |||
invFftFrameSize2 = 1.0f/fftFrameSize2; | |||
invPi = 1.0f/M_PI; | |||
gInFIFO = (float*)calloc(fftFrameSize,sizeof(float)); | |||
gOutFIFO = (float*)calloc(fftFrameSize,sizeof(float)); | |||
gInFIFO = (float*)my_calloc(fftFrameSize * sizeof(float)); | |||
gOutFIFO = (float*)my_calloc(fftFrameSize * sizeof(float)); | |||
gFFTworksp = (float*)pffft_aligned_malloc(fftFrameSize*sizeof(float)); | |||
memset((void*)gFFTworksp, 0, sizeof(fftFrameSize*sizeof(float))); // [bsp] 09Mar2019: fix noise burst after patch loading | |||
memset((void*)gFFTworksp, 0, sizeof(fftFrameSize*sizeof(float))); | |||
gFFTworkspOut = (float*)pffft_aligned_malloc(fftFrameSize*sizeof(float)); | |||
memset((void*)gFFTworkspOut, 0, sizeof(fftFrameSize*sizeof(float))); // [bsp] 09Mar2019: fix noise burst after patch loading | |||
gLastPhase = (float*)calloc((fftFrameSize/2+1),sizeof(float)); | |||
gSumPhase = (float*)calloc((fftFrameSize/2+1),sizeof(float)); | |||
gOutputAccum = (float*)calloc(2*fftFrameSize,sizeof(float)); | |||
gAnaFreq = (float*)calloc(fftFrameSize,sizeof(float)); | |||
gAnaMagn = (float*)calloc(fftFrameSize,sizeof(float)); | |||
gSynFreq = (float*)calloc(fftFrameSize,sizeof(float)); | |||
gSynMagn = (float*)calloc(fftFrameSize,sizeof(float)); | |||
memset((void*)gFFTworkspOut, 0, sizeof(fftFrameSize*sizeof(float))); | |||
gLastPhase = (float*)my_calloc((fftFrameSize/2+1) * sizeof(float)); | |||
gSumPhase = (float*)my_calloc((fftFrameSize/2+1) * sizeof(float)); | |||
gOutputAccum = (float*)my_calloc(2*fftFrameSize * sizeof(float)); | |||
gAnaFreq = (float*)my_calloc(fftFrameSize * sizeof(float)); | |||
gAnaMagn = (float*)my_calloc(fftFrameSize * sizeof(float)); | |||
gSynFreq = (float*)my_calloc(fftFrameSize * sizeof(float)); | |||
gSynMagn = (float*)my_calloc(fftFrameSize * sizeof(float)); | |||
} | |||
~PitchShifter() { | |||
@@ -73,11 +83,15 @@ struct PitchShifter { | |||
void process(const float pitchShift, const float *input, float *output) { | |||
for (i = 0; i < fftFrameSize; i++) { | |||
/* As long as we have not yet collected enough data just read in */ | |||
gInFIFO[gRover] = input[i]; | |||
output[i] = gOutFIFO[gRover-inFifoLatency]; | |||
if(gRover >= inFifoLatency) // [bsp] 09Mar2019: this fixes the noise burst issue in REI | |||
output[i] = gOutFIFO[gRover-inFifoLatency]; | |||
else | |||
output[i] = 0.0f; | |||
gRover++; | |||
/* now we have enough data for processing */ | |||
@@ -6,11 +6,43 @@ | |||
#include "revmodel.hpp" | |||
#include <math.h> | |||
#include <string.h> // memset | |||
namespace rack_plugin_Bidoo { | |||
revmodel::revmodel() | |||
{ | |||
// (note) still doesn't fix REI noise burst issue | |||
#define Dclearbuf(b) memset((void*)b, 0, sizeof(b)) | |||
Dclearbuf(bufcombL1); | |||
Dclearbuf(bufcombR1); | |||
Dclearbuf(bufcombL2); | |||
Dclearbuf(bufcombR2); | |||
Dclearbuf(bufcombL3); | |||
Dclearbuf(bufcombR3); | |||
Dclearbuf(bufcombL4); | |||
Dclearbuf(bufcombR4); | |||
Dclearbuf(bufcombL5); | |||
Dclearbuf(bufcombR5); | |||
Dclearbuf(bufcombL6); | |||
Dclearbuf(bufcombR6); | |||
Dclearbuf(bufcombL7); | |||
Dclearbuf(bufcombR7); | |||
Dclearbuf(bufcombL8); | |||
Dclearbuf(bufcombR8); | |||
// Buffers for the allpasses | |||
Dclearbuf(bufallpassL1); | |||
Dclearbuf(bufallpassR1); | |||
Dclearbuf(bufallpassL2); | |||
Dclearbuf(bufallpassR2); | |||
Dclearbuf(bufallpassL3); | |||
Dclearbuf(bufallpassR3); | |||
Dclearbuf(bufallpassL4); | |||
Dclearbuf(bufallpassR4); | |||
#undef Dclearbuf | |||
// Tie the components to their buffers | |||
combL[0].setbuffer(bufcombL1,combtuningL1); | |||
combR[0].setbuffer(bufcombR1,combtuningR1); | |||
@@ -165,6 +165,9 @@ | |||
------------------------------------------------------------------------ | |||
+ REI: fix noise burst issue in pitchshifter (out of bounds read) | |||
@@ -1,4 +1,9 @@ | |||
** March 9th, 2019 | |||
- fix loud noise burst issue in Bidoo.REI module | |||
- add patch collection (see vst2_bin/patches/bsp/, 90 patches) | |||
** March 8th, 2019 | |||
- update AmalgamatedHarmonics.* 0.6.1 => 0.6.5 | |||
- update Alikins.* 0.6.0 => 0.6.6 | |||
@@ -144,7 +149,6 @@ | |||
- add module Valley.Interzone | |||
** October 31st, 2018 | |||
- add Linux port | |||
- thanks to Github user "cameronleger" for porting LGLW ! | |||
@@ -28,7 +28,7 @@ | |||
"idleDetectFx": 2, | |||
"allowCursorLock": true, | |||
"sampleRate": 44100.0, | |||
"lastPath": "", | |||
"lastPath": "F:\\eureka_data\\vst_patches\\bsp_VeeSeeVST Rack 0.6.1 I_1983212406\\BSP chip bell 1.vcv", | |||
"moduleBrowser": { | |||
"favorites": [ | |||
{ | |||
@@ -44,32 +44,56 @@ | |||
"model": "SpecificValue" | |||
}, | |||
{ | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-Additator" | |||
"plugin": "AS", | |||
"model": "ADSR" | |||
}, | |||
{ | |||
"plugin": "Bidoo", | |||
"model": "BISTROT" | |||
"plugin": "AS", | |||
"model": "AtNuVrTr" | |||
}, | |||
{ | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-VCAmp" | |||
"plugin": "AS", | |||
"model": "TriLFO" | |||
}, | |||
{ | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-XFade" | |||
"plugin": "AudibleInstruments", | |||
"model": "Rings" | |||
}, | |||
{ | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-XCO" | |||
"plugin": "AudibleInstruments", | |||
"model": "Braids" | |||
}, | |||
{ | |||
"plugin": "Bidoo", | |||
"model": "ÎŁ" | |||
"plugin": "AudibleInstruments", | |||
"model": "Tides" | |||
}, | |||
{ | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-Noise" | |||
"plugin": "AudibleInstruments", | |||
"model": "Elements" | |||
}, | |||
{ | |||
"plugin": "AudibleInstruments", | |||
"model": "Clouds" | |||
}, | |||
{ | |||
"plugin": "AudibleInstruments", | |||
"model": "Stages" | |||
}, | |||
{ | |||
"plugin": "Befaco", | |||
"model": "Mixer" | |||
}, | |||
{ | |||
"plugin": "AudibleInstruments", | |||
"model": "Plaits" | |||
}, | |||
{ | |||
"plugin": "Autodafe", | |||
"model": "Multiple 1x8" | |||
}, | |||
{ | |||
"plugin": "Befaco", | |||
"model": "SlewLimiter" | |||
}, | |||
{ | |||
"plugin": "Bidoo", | |||
@@ -77,43 +101,59 @@ | |||
}, | |||
{ | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-SampleHold" | |||
"model": "Bogaudio-Mult" | |||
}, | |||
{ | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-Mult" | |||
"model": "Bogaudio-Switch" | |||
}, | |||
{ | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-XFade" | |||
}, | |||
{ | |||
"plugin": "Bidoo", | |||
"model": "lIMbO" | |||
}, | |||
{ | |||
"plugin": "Bidoo", | |||
"model": "ÎŁ" | |||
}, | |||
{ | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-Switch" | |||
"model": "Bogaudio-XCO" | |||
}, | |||
{ | |||
"plugin": "DHE-Modules", | |||
"model": "Cubic" | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-Additator" | |||
}, | |||
{ | |||
"plugin": "huaba", | |||
"model": "EQ3" | |||
"plugin": "Bidoo", | |||
"model": "BISTROT" | |||
}, | |||
{ | |||
"plugin": "HetrickCV", | |||
"model": "Exponent" | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-VCAmp" | |||
}, | |||
{ | |||
"plugin": "Fundamental", | |||
"model": "VCO2" | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-Noise" | |||
}, | |||
{ | |||
"plugin": "Bogaudio", | |||
"model": "Bogaudio-SampleHold" | |||
}, | |||
{ | |||
"plugin": "ErraticInstruments", | |||
"model": "MPEToCV" | |||
}, | |||
{ | |||
"plugin": "Fundamental", | |||
"model": "LFO2" | |||
"plugin": "FrankBussFormula", | |||
"model": "FrankBussFormula" | |||
}, | |||
{ | |||
"plugin": "DHE-Modules", | |||
"model": "Cubic" | |||
}, | |||
{ | |||
"plugin": "Fundamental", | |||
@@ -121,23 +161,27 @@ | |||
}, | |||
{ | |||
"plugin": "Fundamental", | |||
"model": "VCA" | |||
"model": "VCO" | |||
}, | |||
{ | |||
"plugin": "Fundamental", | |||
"model": "LFO" | |||
"model": "VCO2" | |||
}, | |||
{ | |||
"plugin": "FrankBussFormula", | |||
"model": "FrankBussFormula" | |||
"plugin": "Fundamental", | |||
"model": "Scope" | |||
}, | |||
{ | |||
"plugin": "Fundamental", | |||
"model": "VCO" | |||
"model": "VCA" | |||
}, | |||
{ | |||
"plugin": "Fundamental", | |||
"model": "Scope" | |||
"model": "VCMixer" | |||
}, | |||
{ | |||
"plugin": "Fundamental", | |||
"model": "LFO2" | |||
}, | |||
{ | |||
"plugin": "Fundamental", | |||
@@ -145,35 +189,39 @@ | |||
}, | |||
{ | |||
"plugin": "Fundamental", | |||
"model": "VCMixer" | |||
"model": "LFO" | |||
}, | |||
{ | |||
"plugin": "LindenbergResearch", | |||
"model": "MS20 VCF" | |||
"model": "VCF" | |||
}, | |||
{ | |||
"plugin": "JE", | |||
"model": "RingModulator" | |||
"plugin": "HetrickCV", | |||
"model": "Exponent" | |||
}, | |||
{ | |||
"plugin": "LindenbergResearch", | |||
"model": "VCF" | |||
"plugin": "JE", | |||
"model": "RingModulator" | |||
}, | |||
{ | |||
"plugin": "LindenbergResearch", | |||
"model": "Westcoast VCS" | |||
"model": "MS20 VCF" | |||
}, | |||
{ | |||
"plugin": "LindenbergResearch", | |||
"model": "VCO" | |||
"plugin": "huaba", | |||
"model": "EQ3" | |||
}, | |||
{ | |||
"plugin": "ML_modules", | |||
"model": "VoltMeter" | |||
}, | |||
{ | |||
"plugin": "mscHack", | |||
"model": "Maude221" | |||
"plugin": "LindenbergResearch", | |||
"model": "Westcoast VCS" | |||
}, | |||
{ | |||
"plugin": "LindenbergResearch", | |||
"model": "VCO" | |||
}, | |||
{ | |||
"plugin": "PG-Instruments", | |||
@@ -183,17 +231,25 @@ | |||
"plugin": "PG-Instruments", | |||
"model": "PGPanner" | |||
}, | |||
{ | |||
"plugin": "mscHack", | |||
"model": "Maude221" | |||
}, | |||
{ | |||
"plugin": "Southpole", | |||
"model": "Abr" | |||
}, | |||
{ | |||
"plugin": "Valley", | |||
"model": "Plateau" | |||
}, | |||
{ | |||
"plugin": "bsp", | |||
"model": "Obxd_VCF" | |||
"model": "AttenuMixer" | |||
}, | |||
{ | |||
"plugin": "Template_shared", | |||
"model": "MyModule" | |||
"plugin": "bsp", | |||
"model": "DownSampler" | |||
}, | |||
{ | |||
"plugin": "bsp", | |||
@@ -205,15 +261,11 @@ | |||
}, | |||
{ | |||
"plugin": "bsp", | |||
"model": "Sway" | |||
}, | |||
{ | |||
"plugin": "bsp", | |||
"model": "DownSampler" | |||
"model": "Scanner" | |||
}, | |||
{ | |||
"plugin": "bsp", | |||
"model": "RMS" | |||
"model": "Obxd_VCF" | |||
}, | |||
{ | |||
"plugin": "bsp", | |||
@@ -221,67 +273,15 @@ | |||
}, | |||
{ | |||
"plugin": "bsp", | |||
"model": "AttenuMixer" | |||
}, | |||
{ | |||
"plugin": "Valley", | |||
"model": "Plateau" | |||
"model": "RMS" | |||
}, | |||
{ | |||
"plugin": "bsp", | |||
"model": "Scanner" | |||
}, | |||
{ | |||
"plugin": "AudibleInstruments", | |||
"model": "Clouds" | |||
}, | |||
{ | |||
"plugin": "AS", | |||
"model": "AtNuVrTr" | |||
}, | |||
{ | |||
"plugin": "AudibleInstruments", | |||
"model": "Tides" | |||
}, | |||
{ | |||
"plugin": "AS", | |||
"model": "TriLFO" | |||
}, | |||
{ | |||
"plugin": "AS", | |||
"model": "ADSR" | |||
}, | |||
{ | |||
"plugin": "AudibleInstruments", | |||
"model": "Rings" | |||
}, | |||
{ | |||
"plugin": "AudibleInstruments", | |||
"model": "Elements" | |||
}, | |||
{ | |||
"plugin": "AudibleInstruments", | |||
"model": "Braids" | |||
}, | |||
{ | |||
"plugin": "AudibleInstruments", | |||
"model": "Stages" | |||
}, | |||
{ | |||
"plugin": "Autodafe", | |||
"model": "Multiple 1x8" | |||
}, | |||
{ | |||
"plugin": "Befaco", | |||
"model": "Mixer" | |||
}, | |||
{ | |||
"plugin": "Befaco", | |||
"model": "SlewLimiter" | |||
"model": "Sway" | |||
}, | |||
{ | |||
"plugin": "AudibleInstruments", | |||
"model": "Plaits" | |||
"plugin": "Template_shared", | |||
"model": "MyModule" | |||
} | |||
] | |||
}, | |||