65 lines
2.2 KiB
HTML
65 lines
2.2 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../resources/js-test.js"></script>
|
|
<script type="text/javascript" src="resources/audio-testing.js"></script>
|
|
<script src="resources/audio-file-utils.js"></script>
|
|
<body>
|
|
<script>
|
|
description("Test that decoding an WAV isn't incorrectly receiving silence at the end");
|
|
|
|
window.jsTestIsAsync = true;
|
|
|
|
var context = new window.AudioContext({ sampleRate: 44100 });
|
|
var request = new XMLHttpRequest();
|
|
request.open("GET", 'pinknoise.wav', true);
|
|
request.responseType = "arraybuffer";
|
|
|
|
request.onload = function() {
|
|
context.decodeAudioData(request.response, (buffer) => {
|
|
testPassed("Successfully decoded content");
|
|
// File is exactly 4s @ 44100Hz
|
|
if (buffer.length === 176400)
|
|
testPassed("Decoding returned the right number of frames.");
|
|
else {
|
|
testFailed("Decoding returned the wrong number of frames: " + buffer.length);
|
|
finishJSTest();
|
|
return;
|
|
}
|
|
// convert to 32 bits float WAV.
|
|
const wavData = createAudioData(buffer, true /* asFloat */);
|
|
context.decodeAudioData(wavData.buffer, (buffer) => {
|
|
if (buffer.length === 176400)
|
|
testPassed("Decoding returned the right number of frames.");
|
|
else {
|
|
testFailed("Decoding returned the wrong number of frames: " + buffer.length);
|
|
finishJSTest();
|
|
return;
|
|
}
|
|
const decodedData = buffer.getChannelData(0);
|
|
let consecutiveSilent = 0
|
|
for (const sample of decodedData) {
|
|
if (sample == 0 && ++consecutiveSilent > 3) {
|
|
testFailed("Found silence content.");
|
|
break;
|
|
} else if (sample)
|
|
consecutiveSilent = 0
|
|
}
|
|
if (!consecutiveSilent)
|
|
testPassed("All frames got decoded with no silence.");
|
|
finishJSTest();
|
|
}, () => {
|
|
testFailed("Failed to decode intermediary file");
|
|
finishJSTest();
|
|
});
|
|
}, () => {
|
|
testFailed("Failed to decode file");
|
|
finishJSTest();
|
|
});
|
|
}
|
|
request.send();
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|