olilarkin
07-21-2010, 08:32 AM
can anyone advise me how to get audio in and out of wdl fft? my problem is converting to and from WDL complex numbers i think.
IPlugFFT::IPlugFFT(IPlugInstanceInfo instanceInfo)
: IPLUG_CTOR(kNumParams, kNumPrograms, instanceInfo), mGain(1.), mSampleRate(44100.), mSamplePeriod(1./44100.), fftbuffersize(1024), count(0)
{
TRACE;
GetParam(kGain)->InitDouble("Gain", 0.0, -70.0, 12.0, 0.1, "dB");
WDL_fft_init();
MakeDefaultPreset("-", kNumPrograms);
}
IPlugFFT::~IPlugFFT() {}
void IPlugFFT::ProcessDoubleReplacing(double** inputs, double** outputs, int nFrames)
{
double* in1 = inputs[0];
double* in2 = inputs[1];
double* out1 = outputs[0];
double* out2 = outputs[1];
for (int s = 0; s < nFrames; ++s, ++in1, ++in2, ++out1, ++out2)
{
if(count == fftbuffersize-1)
{
WDL_fft(fftbuffer, fftbuffersize, false);
for (int i = 0; i < fftbuffersize; i++)
{
int j = WDL_fft_permute(fftbuffersize, i);
sortedbuffer[i].re = fftbuffer[j].re;
sortedbuffer[i].im = fftbuffer[j].im;
}
//do processing on sortedbuffer here
for (int i = 0; i < fftbuffersize; i++)
{
int j = WDL_fft_permute(fftbuffersize, i);
unsortedbuffer[j].re = sortedbuffer[i].re;
unsortedbuffer[j].im = sortedbuffer[i].im;
}
WDL_fft(unsortedbuffer, fftbuffersize, true);
count = 0;
}
else
{
count++;
}
fftbuffer[count].re = (WDL_FFT_REAL) *in1; // How to input data to the fft?
*out1 = unsortedbuffer[count].re; //how to output data from the fft?
*out2 = *out1;
}
}
IPlugFFT::IPlugFFT(IPlugInstanceInfo instanceInfo)
: IPLUG_CTOR(kNumParams, kNumPrograms, instanceInfo), mGain(1.), mSampleRate(44100.), mSamplePeriod(1./44100.), fftbuffersize(1024), count(0)
{
TRACE;
GetParam(kGain)->InitDouble("Gain", 0.0, -70.0, 12.0, 0.1, "dB");
WDL_fft_init();
MakeDefaultPreset("-", kNumPrograms);
}
IPlugFFT::~IPlugFFT() {}
void IPlugFFT::ProcessDoubleReplacing(double** inputs, double** outputs, int nFrames)
{
double* in1 = inputs[0];
double* in2 = inputs[1];
double* out1 = outputs[0];
double* out2 = outputs[1];
for (int s = 0; s < nFrames; ++s, ++in1, ++in2, ++out1, ++out2)
{
if(count == fftbuffersize-1)
{
WDL_fft(fftbuffer, fftbuffersize, false);
for (int i = 0; i < fftbuffersize; i++)
{
int j = WDL_fft_permute(fftbuffersize, i);
sortedbuffer[i].re = fftbuffer[j].re;
sortedbuffer[i].im = fftbuffer[j].im;
}
//do processing on sortedbuffer here
for (int i = 0; i < fftbuffersize; i++)
{
int j = WDL_fft_permute(fftbuffersize, i);
unsortedbuffer[j].re = sortedbuffer[i].re;
unsortedbuffer[j].im = sortedbuffer[i].im;
}
WDL_fft(unsortedbuffer, fftbuffersize, true);
count = 0;
}
else
{
count++;
}
fftbuffer[count].re = (WDL_FFT_REAL) *in1; // How to input data to the fft?
*out1 = unsortedbuffer[count].re; //how to output data from the fft?
*out2 = *out1;
}
}