Index: third_party/WebKit/Source/platform/audio/IIRFilter.h |
diff --git a/third_party/WebKit/Source/platform/audio/IIRFilter.h b/third_party/WebKit/Source/platform/audio/IIRFilter.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..07171344be15f2c3a942c3554bc8e93e3906b285 |
--- /dev/null |
+++ b/third_party/WebKit/Source/platform/audio/IIRFilter.h |
@@ -0,0 +1,58 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
tkent
2016/01/13 03:28:29
2016
Raymond Toy
2016/01/13 18:30:54
Done.
|
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef IIRFilter_h |
+#define IIRFilter_h |
+ |
+#include "platform/PlatformExport.h" |
+#include "platform/audio/AudioArray.h" |
+#include "wtf/Vector.h" |
+ |
+namespace blink { |
+ |
+class PLATFORM_EXPORT IIRFilter final { |
+public: |
+ // The maximum IIR filter order. This also limits the number of feedforward coefficients. The |
+ // maximum number of coefficients is 20 according to the spec. |
+ const static size_t kMaxOrder = 19; |
+ IIRFilter(const AudioDoubleArray* feedforwardCoef, const AudioDoubleArray* feedbackCoef); |
+ ~IIRFilter(); |
+ |
+ void process(const float* sourceP, float* destP, size_t framesToProcess); |
+ |
+ void reset(); |
+ |
+ void getFrequencyResponse(int nFrequencies, |
+ const float* frequency, |
+ float* magResponse, |
+ float* phaseResponse); |
+ |
+private: |
+ // Filter memory |
+ // |
+ // For simplicity, we assume |m_xBuffer| and |m_yBuffer| have the same length, and the length is |
+ // a power of two. Since the number of coefficients has a fixed upper length, the size of |
+ // xBuffer and yBuffer is fixed. |m_xBuffer| holds the old input values and |m_yBuffer| holds |
+ // the old output values needed to compute the new output value. |
+ // |
+ // m_yBuffer[m_bufferIndex] holds the most recent output value, say, y[n]. Then |
+ // m_yBuffer[m_bufferIndex - k] is y[n - k]. Similarly for m_xBuffer. |
+ // |
+ // To minimize roundoff, these arrays are double's instead of floats. |
+ AudioDoubleArray m_xBuffer; |
+ AudioDoubleArray m_yBuffer; |
+ |
+ // Index into the xBuffer and yBuffer arrays where the most current x and y values should be |
+ // stored. xBuffer[bufferIndex] corresponds to x[n], the current x input value and |
+ // yBuffer[bufferIndex] is where y[n], the current output value. |
+ int m_bufferIndex; |
+ |
+ // Coefficients of the IIR filter. To minimize storage, these point to the arrays given in the |
+ // constructor. |
+ const AudioDoubleArray* m_feedback; |
+ const AudioDoubleArray* m_feedforward; |
+}; |
+} // blink |
tkent
2016/01/13 03:28:28
nit: blink -> namespace blink
|
+ |
+#endif // IIRFilter_h |