Reverb::Reverb(ThreadSharedFloatArrayBufferList* impulseResponse, size_t impulseResponseBufferLength, size_t maxFFTSize, bool useBackgroundThreads, bool normalize, float sampleRate) { float scale = 1; AutoTArray<const float*,4> irChannels; for (size_t i = 0; i < impulseResponse->GetChannels(); ++i) { irChannels.AppendElement(impulseResponse->GetData(i)); } AutoTArray<float,1024> tempBuf; if (normalize) { scale = calculateNormalizationScale(impulseResponse, impulseResponseBufferLength, sampleRate); if (scale) { tempBuf.SetLength(irChannels.Length()*impulseResponseBufferLength); for (uint32_t i = 0; i < irChannels.Length(); ++i) { float* buf = &tempBuf[i*impulseResponseBufferLength]; AudioBufferCopyWithScale(irChannels[i], scale, buf, impulseResponseBufferLength); irChannels[i] = buf; } } } initialize(irChannels, impulseResponseBufferLength, maxFFTSize, useBackgroundThreads); }
Reverb::Reverb(ThreadSharedFloatArrayBufferList* impulseResponse, size_t impulseResponseBufferLength, size_t renderSliceSize, size_t maxFFTSize, size_t numberOfChannels, bool useBackgroundThreads, bool normalize, float sampleRate) { float scale = 1; if (normalize) { scale = calculateNormalizationScale(impulseResponse, impulseResponseBufferLength, sampleRate); if (scale) { for (uint32_t i = 0; i < impulseResponse->GetChannels(); ++i) { AudioBufferInPlaceScale(const_cast<float*>(impulseResponse->GetData(i)), 1, scale, impulseResponseBufferLength); } } } initialize(impulseResponse, impulseResponseBufferLength, renderSliceSize, maxFFTSize, numberOfChannels, useBackgroundThreads); // Undo scaling since this shouldn't be a destructive operation on impulseResponse. // FIXME: What about roundoff? Perhaps consider making a temporary scaled copy // instead of scaling and unscaling in place. if (normalize && scale) { for (uint32_t i = 0; i < impulseResponse->GetChannels(); ++i) { AudioBufferInPlaceScale(const_cast<float*>(impulseResponse->GetData(i)), 1, 1 / scale, impulseResponseBufferLength); } } }
Reverb::Reverb(AudioBus* impulseResponse, size_t renderSliceSize, size_t maxFFTSize, size_t numberOfChannels, bool useBackgroundThreads) { double scale = calculateNormalizationScale(impulseResponse); if (scale) impulseResponse->scale(scale); initialize(impulseResponse, renderSliceSize, maxFFTSize, numberOfChannels, useBackgroundThreads); // Undo scaling since this shouldn't be a destructive operation on impulseResponse if (scale) impulseResponse->scale(1.0 / scale); }
Reverb::Reverb(AudioBus* impulseResponse, size_t renderSliceSize, size_t maxFFTSize, size_t numberOfChannels, bool useBackgroundThreads, bool normalize) { double scale = 1; if (normalize) { scale = calculateNormalizationScale(impulseResponse); if (scale) impulseResponse->scale(scale); } initialize(impulseResponse, renderSliceSize, maxFFTSize, numberOfChannels, useBackgroundThreads); // Undo scaling since this shouldn't be a destructive operation on impulseResponse. // FIXME: What about roundoff? Perhaps consider making a temporary scaled copy // instead of scaling and unscaling in place. if (normalize && scale) impulseResponse->scale(1.0 / scale); }