| Index: Source/platform/audio/HRTFPanner.cpp
|
| diff --git a/Source/platform/audio/HRTFPanner.cpp b/Source/platform/audio/HRTFPanner.cpp
|
| index bab33c8173f42faf16cff3bb267d22271e99306c..851410a61a04a0459d6627280bdf565679a45b5d 100644
|
| --- a/Source/platform/audio/HRTFPanner.cpp
|
| +++ b/Source/platform/audio/HRTFPanner.cpp
|
| @@ -75,10 +75,20 @@ HRTFPanner::~HRTFPanner()
|
| size_t HRTFPanner::fftSizeForSampleRate(float sampleRate)
|
| {
|
| // The HRTF impulse responses (loaded as audio resources) are 512 sample-frames @44.1KHz.
|
| - // Currently, we truncate the impulse responses to half this size, but an FFT-size of twice impulse response size is needed (for convolution).
|
| - // So for sample rates around 44.1KHz an FFT size of 512 is good. We double the FFT-size only for sample rates at least double this.
|
| - ASSERT(sampleRate >= 44100 && sampleRate <= 96000.0);
|
| - return (sampleRate < 88200.0) ? 512 : 1024;
|
| + // Currently, we truncate the impulse responses to half this size,
|
| + // but an FFT-size of twice impulse response size is needed (for convolution).
|
| + // So for sample rates around 44.1KHz an FFT size of 512 is good.
|
| + // For different sample rates, the truncated response is resampled.
|
| + // The resampled length is used to compute the FFT size by choosing a power of two that is
|
| + // greater than or equal the resampled length. This power of two is doubled to get the actual FFT size.
|
| +
|
| + ASSERT(sampleRate >= 3000 && sampleRate <= 192000);
|
| +
|
| + int truncatedImpulseLength = 256;
|
| + double sampleRateRatio = sampleRate / 44100;
|
| + double resampledLength = truncatedImpulseLength * sampleRateRatio;
|
| +
|
| + return 2 * (1 << static_cast<unsigned>(log2(resampledLength)));
|
| }
|
|
|
| void HRTFPanner::reset()
|
|
|