summaryrefslogtreecommitdiffstats
path: root/dom/media/webaudio/test/test_decodeMultichannel.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/webaudio/test/test_decodeMultichannel.html')
-rw-r--r--dom/media/webaudio/test/test_decodeMultichannel.html75
1 files changed, 75 insertions, 0 deletions
diff --git a/dom/media/webaudio/test/test_decodeMultichannel.html b/dom/media/webaudio/test/test_decodeMultichannel.html
new file mode 100644
index 0000000000..a799c641ee
--- /dev/null
+++ b/dom/media/webaudio/test/test_decodeMultichannel.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML>
+<html>
+<meta charset=utf-8>
+<head>
+ <title>Test that we can decode multichannel file with webaudio and &lt;audio&gt;</title>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<pre id="test">
+<script class="testbody" type="text/javascript">
+var testcases = [
+ {
+ filename: "audio-quad.wav",
+ channels: 4
+ },
+ {
+ filename: "8kHz-320kbps-6ch.aac",
+ channels: 6
+ }
+];
+
+SimpleTest.waitForExplicitFinish();
+
+function decodeUsingAudioElement(filename, resolve) {
+ var a = new Audio();
+ a.addEventListener("error", function() {
+ ok(false, "Error loading metadata");
+ resolve();
+ });
+ a.addEventListener("loadedmetadata", function() {
+ ok(true, "Metadata Loaded");
+ resolve();
+ });
+
+ a.src = filename;
+ a.load();
+}
+
+function testOne({filename, channels}) {
+ return new Promise(resolve => {
+ var xhr = new XMLHttpRequest();
+ xhr.open("GET", filename);
+ xhr.responseType = "arraybuffer";
+ xhr.onload = function() {
+ var context = new AudioContext();
+ context.decodeAudioData(xhr.response, function(b) {
+ ok(true, "Decoding of a wave file with four channels succeded.");
+ is(b.numberOfChannels,
+ channels,
+ `The AudioBuffer decoded from ${filename} should have ${channels} channels.`);
+ decodeUsingAudioElement(filename, resolve);
+ }, function() {
+ ok(false, `Decoding ${filename} failed)`);
+ decodeUsingAudioElement(filename, resolve);
+ });
+ };
+ xhr.send(null);
+ });
+}
+
+async function runTest() {
+ for (var testcase of testcases) {
+ await testOne(testcase);
+ }
+
+ SimpleTest.finish();
+}
+
+addLoadEvent(runTest);
+
+</script>
+</pre>
+</body>
+</html>