зеркало из https://github.com/mozilla/gecko-dev.git
99 строки
2.7 KiB
HTML
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>
|