| <!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 webkitOfflineAudioContext(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> |