gecko-dev/dom/media/webaudio/test/test_delayNodeChannelChange...

99 строки
2.7 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<title>test DelayNode channel count changes</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="webaudio.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();
SimpleTest.requestCompleteLog();
const bufferSize = 4096;
var ctx;
var testDelay;
var stereoDelay;
var invertor;
function compareOutputs(callback) {
var processor = ctx.createScriptProcessor(bufferSize, 2, 0);
testDelay.connect(processor);
invertor.connect(processor);
processor.onaudioprocess =
function(e) {
compareBuffers(e.inputBuffer,
ctx.createBuffer(2, bufferSize, ctx.sampleRate));
e.target.onaudioprocess = null;
callback();
}
}
function startTest() {
// And a two-channel signal
var merger = ctx.createChannelMerger();
merger.connect(testDelay);
merger.connect(stereoDelay);
var oscL = ctx.createOscillator();
oscL.connect(merger, 0, 0);
oscL.start(0);
var oscR = ctx.createOscillator();
oscR.type = "sawtooth";
oscR.connect(merger, 0, 1);
oscR.start(0);
compareOutputs(
function () {
// Disconnect the two-channel signal and test again
merger.disconnect();
compareOutputs(SimpleTest.finish);
});
}
function prepareTest() {
ctx = new AudioContext();
// The output of a test delay node with mono and stereo input will be
// compared with that of separate mono and stereo delay nodes.
const delayTime = 0.3 * bufferSize / ctx.sampleRate;
testDelay = ctx.createDelay(delayTime);
testDelay.delayTime.value = delayTime;
monoDelay = ctx.createDelay(delayTime);
monoDelay.delayTime.value = delayTime;
stereoDelay = ctx.createDelay(delayTime);
stereoDelay.delayTime.value = delayTime;
// Create a one-channel signal and connect to the delay nodes
var monoOsc = ctx.createOscillator();
monoOsc.frequency.value = 110;
monoOsc.connect(testDelay);
monoOsc.connect(monoDelay);
monoOsc.start(0);
// Invert the expected so that mixing with the test will find the difference.
invertor = ctx.createGain();
invertor.gain.value = -1.0;
monoDelay.connect(invertor);
stereoDelay.connect(invertor);
// Start the test after the delay nodes have begun processing.
var processor = ctx.createScriptProcessor(bufferSize, 1, 0);
processor.connect(ctx.destination);
processor.onaudioprocess =
function(e) {
e.target.onaudioprocess = null;
processor.disconnect();
startTest();
};
}
prepareTest();
</script>
</pre>
</body>
</html>