Index: third_party/WebKit/LayoutTests/webaudio/BiquadFilter/test-tail-time.js |
diff --git a/third_party/WebKit/LayoutTests/webaudio/BiquadFilter/test-tail-time.js b/third_party/WebKit/LayoutTests/webaudio/BiquadFilter/test-tail-time.js |
deleted file mode 100644 |
index 94f1449e69eaa81191a216458a9ab03a39c6ccc7..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/LayoutTests/webaudio/BiquadFilter/test-tail-time.js |
+++ /dev/null |
@@ -1,90 +0,0 @@ |
-function testTailTime(should, context, options) { |
- let src = new ConstantSourceNode(context, {offset: 1}); |
- let f = new BiquadFilterNode(context, options.filterOptions); |
- |
- src.connect(f).connect(context.destination); |
- src.start(); |
- src.stop(1 / context.sampleRate); |
- |
- let expectedTailFrame = computeTailFrame(f); |
- |
- // The internal Biquad time computation limits he tail time to a |
- // maximum of 30 sec. We need to limit the computed tail frame to |
- // that limit as well. |
- expectedTailFrame = Math.min(expectedTailFrame, 30 * context.sampleRate); |
- |
- return context.startRendering().then(renderedBuffer => { |
- let s = renderedBuffer.getChannelData(0); |
- let prefix = options.prefix + ': Biquad(' + |
- JSON.stringify(options.filterOptions) + ')'; |
- |
- // Round actual tail frame to a render boundary |
- let quantumIndex = Math.floor(expectedTailFrame / RENDER_QUANTUM_FRAMES); |
- let expectedTailBoundary = RENDER_QUANTUM_FRAMES * quantumIndex; |
- |
- // Find the actual tail frame. That is, the last point where the |
- // output is not zero. |
- let actualTailFrame; |
- |
- for (actualTailFrame = s.length; actualTailFrame > 0; --actualTailFrame) { |
- if (Math.abs(s[actualTailFrame - 1]) > 0) |
- break; |
- } |
- |
- should(actualTailFrame, `${prefix}: Actual Tail Frame ${actualTailFrame}`) |
- .beGreaterThanOrEqualTo(expectedTailFrame); |
- |
- // Verify each render quanta is not identically zero up to the |
- // boundary. |
- for (let k = 0; k <= quantumIndex; ++k) { |
- let firstFrame = RENDER_QUANTUM_FRAMES * k; |
- let lastFrame = firstFrame + RENDER_QUANTUM_FRAMES - 1; |
- should( |
- s.slice(firstFrame, lastFrame + 1), |
- `${prefix}: output[${firstFrame}:${lastFrame}]`) |
- .notBeConstantValueOf(0); |
- } |
- // The frames after the tail should be zero. Because the |
- // implementation uses approximations to simplify the |
- // computations, the nodes tail time may be greater than the real |
- // impulse response tail. Thus, we just verify that the output |
- // over the tail is less than the tail threshold value. |
- let zero = new Float32Array(s.length); |
- should( |
- s.slice(expectedTailBoundary + RENDER_QUANTUM_FRAMES + 256), |
- prefix + ': output[' + |
- (expectedTailBoundary + RENDER_QUANTUM_FRAMES + 256) + ':]') |
- .beCloseToArray( |
- zero.slice(expectedTailBoundary + RENDER_QUANTUM_FRAMES + 256), |
- {absoluteThreshold: options.threshold || 0}); |
- }) |
-} |
- |
-function computeTailFrame(filterNode) { |
- // Compute the impuluse response for the filter |filterNode| by |
- // filtering the impulse directly ourself. |
- let coef = createFilter( |
- filterNode.type, |
- filterNode.frequency.value / filterNode.context.sampleRate * 2, |
- filterNode.Q.value, filterNode.gain.value); |
- |
- let impulse = new Float32Array(filterNode.context.length); |
- impulse[0] = 1; |
- |
- let filtered = filterData(coef, impulse, impulse.length); |
- |
- // Compute the magnitude and find out where the imuplse is small enough. |
- let tailFrame = 0; |
- if (Math.abs(filtered[filtered.length - 1]) >= 1 / 32768) { |
- tailFrame = filtered.length - 1; |
- } else { |
- for (let k = filtered.length - 1; k >= 0; --k) { |
- if (Math.abs(filtered[k]) >= 1 / 32768) { |
- tailFrame = k + 1; |
- break; |
- } |
- } |
- } |
- |
- return tailFrame; |
-} |