Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1762)

Unified Diff: Source/platform/audio/AudioUtilities.cpp

Issue 565643003: Move utility functions for sample rate to AudioUtilities. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/platform/audio/AudioUtilities.cpp
diff --git a/Source/platform/audio/AudioUtilities.cpp b/Source/platform/audio/AudioUtilities.cpp
index 531d22d3ed8e4788da6ca2a771fa987434cdb4b2..73786f0279be2c09365f5ac16c932b61d69fcf44 100644
--- a/Source/platform/audio/AudioUtilities.cpp
+++ b/Source/platform/audio/AudioUtilities.cpp
@@ -27,6 +27,7 @@
#if ENABLE(WEB_AUDIO)
#include "platform/audio/AudioUtilities.h"
+
#include "wtf/Assertions.h"
#include "wtf/MathExtras.h"
@@ -59,6 +60,41 @@ size_t timeToSampleFrame(double time, double sampleRate)
{
return static_cast<size_t>(round(time * sampleRate));
}
+
+bool isSampleRateRangeGood(float sampleRate)
+{
+ return sampleRate >= minAllowedSampleRate() && sampleRate <= maxAllowedSampleRate();
+}
+
+size_t fftSizeForSampleRate(float sampleRate)
+{
+ // Currently, we truncate the impulse responses to half this size,
Raymond Toy 2014/09/11 16:38:45 Need more context here because "this size" has no
KhNo 2014/09/12 15:01:05 Done.
+ // 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(isSampleRateRangeGood(sampleRate));
+
+ int truncatedImpulseLength = 256;
+ double sampleRateRatio = sampleRate / 44100;
+ double resampledLength = truncatedImpulseLength * sampleRateRatio;
+
+ return 2 * (1 << static_cast<unsigned>(log2(resampledLength)));
+}
+
+float minAllowedSampleRate()
+{
+ // crbug.com/344375
+ return 3000;
+}
+
+float maxAllowedSampleRate()
+{
+ // Windows can support up to this rate.
+ return 192000;
+}
} // AudioUtilites
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698