Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /webaudio/the-audio-api/the-analysernode-interface/test-analysernode.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function testNode() {
var context = new AudioContext();
var buffer = context.createBuffer(1, 2048, context.sampleRate);
for (var i = 0; i < 2048; ++i) {
buffer.getChannelData(0)[i] = Math.sin(
440 * 2 * Math.PI * i / context.sampleRate
);
}
var destination = context.destination;
var source = context.createBufferSource();
var analyser = context.createAnalyser();
source.buffer = buffer;
source.connect(analyser);
analyser.connect(destination);
assert_equals(
analyser.channelCount,
2,
"analyser node has 2 input channels by default"
);
assert_equals(
analyser.channelCountMode,
"max",
"Correct channelCountMode for the analyser node"
);
assert_equals(
analyser.channelInterpretation,
"speakers",
"Correct channelCountInterpretation for the analyser node"
);
assert_equals(
analyser.fftSize,
2048,
"Correct default value for fftSize"
);
assert_equals(
analyser.frequencyBinCount,
1024,
"Correct default value for frequencyBinCount"
);
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.fftSize = 0;
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.fftSize = 1;
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.fftSize = 8;
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.fftSize = 100;
}); // non-power of two
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.fftSize = 2049;
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.fftSize = 4097;
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.fftSize = 8193;
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.fftSize = 16385;
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.fftSize = 32769;
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.fftSize = 65536;
});
analyser.fftSize = 1024;
assert_equals(
analyser.frequencyBinCount,
512,
"Correct new value for frequencyBinCount"
);
assert_equals(
analyser.minDecibels,
-100,
"Correct default value for minDecibels"
);
assert_equals(
analyser.maxDecibels,
-30,
"Correct default value for maxDecibels"
);
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.minDecibels = -30;
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.minDecibels = -29;
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.maxDecibels = -100;
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.maxDecibels = -101;
});
assert_true(
Math.abs(analyser.smoothingTimeConstant - 0.8) < 0.001,
"Correct default value for smoothingTimeConstant"
);
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.smoothingTimeConstant = -0.1;
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser.smoothingTimeConstant = 1.1;
});
analyser.smoothingTimeConstant = 0;
analyser.smoothingTimeConstant = 1;
}
function testConstructor() {
var context = new AudioContext();
var analyser = new AnalyserNode(context);
assert_equals(
analyser.channelCount,
2,
"analyser node has 2 input channels by default"
);
assert_equals(
analyser.channelCountMode,
"max",
"Correct channelCountMode for the analyser node"
);
assert_equals(
analyser.channelInterpretation,
"speakers",
"Correct channelCountInterpretation for the analyser node"
);
assert_equals(
analyser.fftSize,
2048,
"Correct default value for fftSize"
);
assert_equals(
analyser.frequencyBinCount,
1024,
"Correct default value for frequencyBinCount"
);
assert_equals(
analyser.minDecibels,
-100,
"Correct default value for minDecibels"
);
assert_equals(
analyser.maxDecibels,
-30,
"Correct default value for maxDecibels"
);
assert_true(
Math.abs(analyser.smoothingTimeConstant - 0.8) < 0.001,
"Correct default value for smoothingTimeConstant"
);
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { fftSize: 0 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { fftSize: 1 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { fftSize: 8 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { fftSize: 100 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { fftSize: 2049 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { fftSize: 4097 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { fftSize: 8193 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { fftSize: 16385 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { fftSize: 32769 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { fftSize: 65536 });
});
analyser = new AnalyserNode(context, { fftSize: 1024 });
assert_equals(
analyser.frequencyBinCount,
512,
"Correct new value for frequencyBinCount"
);
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { minDecibels: -30 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { minDecibels: -29 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { maxDecibels: -100 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { maxDecibels: -101 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { smoothingTimeConstant: -0.1 });
});
assert_throws_dom("INDEX_SIZE_ERR", function() {
analyser = new AnalyserNode(context, { smoothingTimeConstant: -1.1 });
});
analyser = new AnalyserNode(context, { smoothingTimeConstant: 0 });
analyser = new AnalyserNode(context, { smoothingTimeConstant: 1 });
}
test(testNode, "Test AnalyserNode API");
test(testConstructor, "Test AnalyserNode's ctor API");
</script>
</head>
</body>
</html>