mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 21:35:39 +00:00
ba91bfca8e
MozReview-Commit-ID: 3XgQCq4Gg0S --HG-- extra : rebase_source : 35a4c0c8a626350f96ba0d2359b28f557235aae4
78 lines
2.5 KiB
HTML
78 lines
2.5 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<title>Test whether we can create an AudioContext interface</title>
|
|
<script type="text/javascript" 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">
|
|
|
|
SimpleTest.waitForExplicitFinish()
|
|
|
|
function frameToTime(frame, rate)
|
|
{
|
|
return frame / rate;
|
|
}
|
|
|
|
const RATE = 44100;
|
|
|
|
var oc = new OfflineAudioContext(1, 44100, RATE);
|
|
// This allows us to have a source that is simply a DC offset.
|
|
var source = oc.createBufferSource();
|
|
var buf = oc.createBuffer(1, 1, RATE);
|
|
buf.getChannelData(0)[0] = 1;
|
|
source.loop = true;
|
|
source.buffer = buf;
|
|
|
|
source.start(0);
|
|
|
|
var gain = oc.createGain();
|
|
|
|
source.connect(gain).connect(oc.destination);
|
|
|
|
var gain2 = oc.createGain();
|
|
var rv2 = gain2.gain.linearRampToValueAtTime(0.1, 0.5);
|
|
ok(rv2 instanceof AudioParam, "linearRampToValueAtTime returns an AudioParam.");
|
|
ok(rv2 == gain2.gain, "linearRampToValueAtTime returns the right AudioParam.");
|
|
|
|
rv2 = gain2.gain.exponentialRampToValueAtTime(0.01, 1.0);
|
|
ok(rv2 instanceof AudioParam,
|
|
"exponentialRampToValueAtTime returns an AudioParam.");
|
|
ok(rv2 == gain2.gain,
|
|
"exponentialRampToValueAtTime returns the right AudioParam.");
|
|
|
|
rv2 = gain2.gain.setTargetAtTime(1.0, 2.0, 0.1);
|
|
ok(rv2 instanceof AudioParam, "setTargetAtTime returns an AudioParam.");
|
|
ok(rv2 == gain2.gain, "setTargetAtTime returns the right AudioParam.");
|
|
|
|
var array = new Float32Array(10);
|
|
rv2 = gain2.gain.setValueCurveAtTime(array, 10, 11);
|
|
ok(rv2 instanceof AudioParam, "setValueCurveAtTime returns an AudioParam.");
|
|
ok(rv2 == gain2.gain, "setValueCurveAtTime returns the right AudioParam.");
|
|
|
|
// We chain three automation methods, making a gain step.
|
|
var rv = gain.gain.setValueAtTime(0, frameToTime(0, RATE))
|
|
.setValueAtTime(0.5, frameToTime(22000, RATE))
|
|
.setValueAtTime(1, frameToTime(44000, RATE));
|
|
|
|
ok(rv instanceof AudioParam, "setValueAtTime returns an AudioParam.");
|
|
ok(rv == gain.gain, "setValueAtTime returns the right AudioParam.");
|
|
|
|
oc.startRendering().then(function(rendered) {
|
|
console.log(rendered.getChannelData(0));
|
|
is(rendered.getChannelData(0)[0], 0,
|
|
"The value of the first step is correct.");
|
|
is(rendered.getChannelData(0)[22050], 0.5,
|
|
"The value of the second step is correct");
|
|
is(rendered.getChannelData(0)[44099], 1,
|
|
"The value of the third step is correct.");
|
|
SimpleTest.finish();
|
|
});
|
|
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
</html>
|