67 lines
1.8 KiB
HTML
67 lines
1.8 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<script src="../resources/js-test.js"></script>
|
|
<script src="resources/audio-testing.js"></script>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="description"></div>
|
|
<div id="console"></div>
|
|
|
|
<script>
|
|
description("This tests that we don't trigger an assertion failure due to AudioNode connection order.");
|
|
|
|
var sampleRate = 44100.0;
|
|
var renderLengthSeconds = 0.125;
|
|
var delayTimeSeconds = 0.1;
|
|
|
|
function createSinWaveBuffer(context, lengthInSeconds, frequency) {
|
|
var audioBuffer = context.createBuffer(1, lengthInSeconds * sampleRate, sampleRate);
|
|
|
|
var n = audioBuffer.length;
|
|
var data = audioBuffer.getChannelData(0);
|
|
|
|
for (var i = 0; i < n; ++i) {
|
|
data[i] = Math.sin(frequency * 2 * Math.PI * i / sampleRate);
|
|
}
|
|
|
|
return audioBuffer;
|
|
}
|
|
|
|
function runTest() {
|
|
window.jsTestIsAsync = true;
|
|
|
|
// Create offline audio context.
|
|
var context = new OfflineAudioContext(1, sampleRate * renderLengthSeconds, sampleRate);
|
|
var toneBuffer = createSinWaveBuffer(context, renderLengthSeconds, 880);
|
|
|
|
var bufferSource = context.createBufferSource();
|
|
bufferSource.buffer = toneBuffer;
|
|
bufferSource.connect(context.destination);
|
|
|
|
var delay = context.createDelay();
|
|
delay.delayTime.value = delayTimeSeconds;
|
|
|
|
// We connect delay node to gain node before anything is connected to delay node itself.
|
|
// We do this because we try to trigger the ASSERT which might be fired due to AudioNode connection order,
|
|
// especially when gain node and delay node is involved e.g. https://bugs.webkit.org/show_bug.cgi?id=76685.
|
|
|
|
var gain = context.createGain();
|
|
gain.connect(context.destination);
|
|
delay.connect(gain);
|
|
|
|
bufferSource.start(0);
|
|
|
|
context.oncomplete = finishJSTest;
|
|
context.startRendering();
|
|
}
|
|
|
|
runTest();
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|