зеркало из https://github.com/mozilla/gecko-dev.git
45 строки
1.5 KiB
HTML
45 строки
1.5 KiB
HTML
<!DOCTYPE html>
|
|
<title>Test convolution effect has finite duration</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script>
|
|
promise_test(function() {
|
|
|
|
const responseLength = 256;
|
|
// Accept an influence period of twice the responseLength to accept FFT
|
|
// implementations.
|
|
const tolerancePeriod = 2 * responseLength;
|
|
const totalSize = tolerancePeriod + responseLength;
|
|
|
|
var context = new OfflineAudioContext(1, totalSize, 48000);
|
|
|
|
var responseBuffer =
|
|
context.createBuffer(1, responseLength, context.sampleRate);
|
|
var responseChannelData = responseBuffer.getChannelData(0);
|
|
responseChannelData[0] = 1;
|
|
responseChannelData[responseLength - 1] = 1;
|
|
var convolver = context.createConvolver();
|
|
convolver.buffer = responseBuffer;
|
|
convolver.connect(context.destination);
|
|
|
|
var sourceBuffer = context.createBuffer(1, totalSize, context.sampleRate);
|
|
sourceBuffer.getChannelData(0)[0] = NaN;
|
|
var source = context.createBufferSource();
|
|
source.buffer = sourceBuffer;
|
|
source.connect(convolver);
|
|
source.start();
|
|
|
|
return context.startRendering().
|
|
then((buffer) => {
|
|
var convolverOutput = buffer.getChannelData(0);
|
|
// There should be no non-zeros after the tolerance period.
|
|
var testIndex = tolerancePeriod;
|
|
for (;
|
|
testIndex < buffer.length - 1 && convolverOutput[testIndex] == 0;
|
|
++testIndex) {
|
|
}
|
|
assert_equals(convolverOutput[testIndex], 0, "output at " + testIndex);
|
|
});
|
|
});
|
|
</script>
|