24#if defined(FFTCONVOLVER_USE_SSE)
32 : _blockSize(0), _segSize(0), _segCount(0), _fftComplexSize(0), _segments(), _segmentsIR(), _fftBuffer(),
33 _fft(), _preMultiplied(), _conv(), _overlap(), _current(0), _inputBuffer(), _inputBufferFill(0)
73 while (irLen > 0 && ::fabs(ir[irLen - 1]) < 0.000001f)
85 _segCount =
static_cast<size_t>(::ceil(
static_cast<float>(irLen) /
static_cast<float>(
_blockSize)));
102 const size_t remaining = irLen - (i *
_blockSize);
128 ::memset(output, 0, len *
sizeof(
Sample));
132 size_t processed = 0;
133 while (processed < len)
145 if (inputBufferWasEmpty)
150 const size_t indexIr = i;
179 processed += processing;
void init(size_t size)
Initializes the FFT object.
Definition AudioFFT.cpp:984
void fft(const float *data, float *re, float *im)
Performs the forward FFT.
Definition AudioFFT.cpp:990
void ifft(float *data, const float *re, const float *im)
Performs the inverse FFT.
Definition AudioFFT.cpp:992
static size_t ComplexSize(size_t size)
Calculates the necessary size of the real/imaginary complex arrays.
Definition AudioFFT.cpp:994
T * data()
Definition Utilities.h:117
void setZero()
Definition Utilities.h:92
void resize(size_t size)
Definition Utilities.h:74
void clear()
Definition Utilities.h:67
size_t _current
Definition FFTConvolver.h:83
size_t _segSize
Definition FFTConvolver.h:73
size_t _inputBufferFill
Definition FFTConvolver.h:85
SplitComplex _conv
Definition FFTConvolver.h:81
SplitComplex _preMultiplied
Definition FFTConvolver.h:80
void reset()
Resets the convolver and discards the set impulse response.
Definition FFTConvolver.cpp:39
std::vector< SplitComplex * > _segments
Definition FFTConvolver.h:76
size_t _fftComplexSize
Definition FFTConvolver.h:75
SampleBuffer _fftBuffer
Definition FFTConvolver.h:78
size_t _segCount
Definition FFTConvolver.h:74
void process(const Sample *input, Sample *output, size_t len)
Convolves the the given input samples and immediately outputs the result.
Definition FFTConvolver.cpp:124
audiofft::AudioFFT _fft
Definition FFTConvolver.h:79
SampleBuffer _overlap
Definition FFTConvolver.h:82
virtual ~FFTConvolver()
Definition FFTConvolver.cpp:37
SampleBuffer _inputBuffer
Definition FFTConvolver.h:84
bool init(size_t blockSize, const Sample *ir, size_t irLen)
Initializes the convolver.
Definition FFTConvolver.cpp:63
FFTConvolver()
Definition FFTConvolver.cpp:31
std::vector< SplitComplex * > _segmentsIR
Definition FFTConvolver.h:77
size_t _blockSize
Definition FFTConvolver.h:72
Buffer for split-complex representation of FFT results.
Definition Utilities.h:173
void setZero()
Definition Utilities.h:193
Sample * im()
Definition Utilities.h:209
void clear()
Definition Utilities.h:179
void copyFrom(const SplitComplex &other)
Definition Utilities.h:199
void resize(size_t newSize)
Definition Utilities.h:186
Sample * re()
Definition Utilities.h:205
Definition FFTConvolver.cpp:29
float Sample
Type of one sample.
Definition Utilities.h:157
T NextPowerOf2(const T &val)
Returns the next power of 2 of a given number.
Definition Utilities.h:230
void ComplexMultiplyAccumulate(SplitComplex &result, const SplitComplex &a, const SplitComplex &b)
Adds the complex product of two split-complex buffers to a result buffer.
Definition Utilities.cpp:53
void CopyAndPad(Buffer< T > &dest, const T *src, size_t srcSize)
Copies a source array into a destination buffer and pads the destination buffer with zeros.
Definition Utilities.h:256
void Sum(Sample *FFTCONVOLVER_RESTRICT result, const Sample *FFTCONVOLVER_RESTRICT a, const Sample *FFTCONVOLVER_RESTRICT b, size_t len)
Sums two given sample arrays.
Definition Utilities.cpp:36