Index: third_party/WebKit/LayoutTests/webaudio/ChannelMerger/audiochannelmerger-cycle.html |
diff --git a/third_party/WebKit/LayoutTests/webaudio/ChannelMerger/audiochannelmerger-cycle.html b/third_party/WebKit/LayoutTests/webaudio/ChannelMerger/audiochannelmerger-cycle.html |
index d6950f469d17867083534dfd2271e0ff3c165995..aecfef2bdd9ff8ac12b9b2a8aa02a0266cf3b13b 100644 |
--- a/third_party/WebKit/LayoutTests/webaudio/ChannelMerger/audiochannelmerger-cycle.html |
+++ b/third_party/WebKit/LayoutTests/webaudio/ChannelMerger/audiochannelmerger-cycle.html |
@@ -1,87 +1,83 @@ |
<!DOCTYPE html> |
<html> |
+ <head> |
+ <title> |
+ audiochannelmerger-cycle.html |
+ </title> |
+ <script src="../../resources/testharness.js"></script> |
+ <script src="../../resources/testharnessreport.js"></script> |
+ <script src="../resources/audit-util.js"></script> |
+ <script src="../resources/audit.js"></script> |
+ </head> |
+ <body> |
+ <script id="layout-test-code"> |
+ // This specific sample rate is chosen to avoid the round/truncation error |
+ // in delay time. See: crbug.com/448801 |
+ let sampleRate = 32768; |
+ |
+ // Web Audio API's rendering quantum. |
+ let renderingQuantum = 128; |
+ |
+ // 4x of rendering quantum. This is to make the rendered result long |
+ // enough so that we can observe the delayed output. |
+ let renderLength = renderingQuantum * 4; |
+ |
+ // 1x rendering quantum of delay. |
+ let delayTime = renderingQuantum / sampleRate; |
+ |
+ // Use 2 channels as a test case. |
+ let numberOfChannels = 2; |
+ |
+ let audit = Audit.createTaskRunner(); |
+ |
+ audit.define('merger-cyclic-graph', (task, should) => { |
+ |
+ let context = |
+ new OfflineAudioContext(numberOfChannels, renderLength, sampleRate); |
+ let merger = context.createChannelMerger(2); |
+ let delay = context.createDelay(); |
+ let source = context.createBufferSource(); |
+ |
+ // Create a mono source buffer filled with '1'. |
+ source.buffer = createConstantBuffer(context, renderLength, [1]); |
+ |
+ delay.delayTime.value = delayTime; |
+ |
+ // Connect the source to input 0 of the merger. Connect the output of |
+ // the merger to a delay node whose output is then connected to input 1 |
+ // of the merger. See: crbug.com/442925 |
+ source.connect(merger, 0, 0); |
+ delay.connect(merger, 0, 1); |
+ merger.connect(delay); |
+ merger.connect(context.destination); |
+ source.start(); |
+ |
+ context.startRendering().then(function(buffer) { |
+ // Expected output values: the output of delay node will be a stereo |
+ // signal of [1, 0]. When it feeds back to the 2nd input of merger |
+ // node, the stereo channel will be summed to mono resulting in 0.5. |
+ let expected_left = []; |
+ let expected_right = []; |
+ |
+ for (let i = 0; i < renderLength; i++) { |
+ // Note that the delayed channel will be zero for the first 128 |
+ // samples due to the cyclic audio graph, the second 128 sample will |
+ // be also zero because of 128 samples delay. |
+ expected_left[i] = 1.0; |
+ expected_right[i] = (i < renderingQuantum * 2) ? 0.0 : 0.5; |
+ } |
+ |
+ let actual_left = buffer.getChannelData(0); |
+ let actual_right = buffer.getChannelData(1); |
+ should(actual_left, 'Left channel').beEqualToArray(expected_left); |
+ should(actual_right, 'Right channel').beEqualToArray(expected_right); |
+ |
+ task.done(); |
+ }); |
-<head> |
- <script src="../../resources/testharness.js"></script> |
- <script src="../../resources/testharnessreport.js"></script> |
- <script src="../resources/audit-util.js"></script> |
- <script src="../resources/audit.js"></script> |
-</head> |
- |
-<body> |
- <script> |
- |
- // This specific sample rate is chosen to avoid the round/truncation error |
- // in delay time. See: crbug.com/448801 |
- var sampleRate = 32768; |
- |
- // Web Audio API's rendering quantum. |
- var renderingQuantum = 128; |
- |
- // 4x of rendering quantum. This is to make the rendered result long enough |
- // so that we can observe the delayed output. |
- var renderLength = renderingQuantum * 4; |
- |
- // 1x rendering quantum of delay. |
- var delayTime = renderingQuantum / sampleRate; |
- |
- // Use 2 channels as a test case. |
- var numberOfChannels = 2; |
- |
- var audit = Audit.createTaskRunner(); |
- |
- audit.define('merger-cyclic-graph', (task, should) => { |
- |
- var context = new OfflineAudioContext( |
- numberOfChannels, renderLength, sampleRate |
- ); |
- var merger = context.createChannelMerger(2); |
- var delay = context.createDelay(); |
- var source = context.createBufferSource(); |
- |
- // Create a mono source buffer filled with '1'. |
- source.buffer = createConstantBuffer(context, renderLength, [1]); |
- |
- delay.delayTime.value = delayTime; |
- |
- // Connect the source to input 0 of the merger. Connect the output of |
- // the merger to a delay node whose output is then connected to input 1 |
- // of the merger. See: crbug.com/442925 |
- source.connect(merger, 0, 0); |
- delay.connect(merger, 0, 1); |
- merger.connect(delay); |
- merger.connect(context.destination); |
- source.start(); |
- |
- context.startRendering().then(function (buffer) { |
- // Expected output values: the output of delay node will be a stereo |
- // signal of [1, 0]. When it feeds back to the 2nd input of merger node, |
- // the stereo channel will be summed to mono resulting in 0.5. |
- var expected_left = []; |
- var expected_right = []; |
- |
- for (var i = 0; i < renderLength; i++) { |
- // Note that the delayed channel will be zero for the first 128 samples |
- // due to the cyclic audio graph, the second 128 sample will be also |
- // zero because of 128 samples delay. |
- expected_left[i] = 1.0; |
- expected_right[i] = (i < renderingQuantum * 2) ? 0.0 : 0.5; |
- } |
- |
- var actual_left = buffer.getChannelData(0); |
- var actual_right = buffer.getChannelData(1); |
- should(actual_left, "Left channel") |
- .beEqualToArray(expected_left); |
- should(actual_right, "Right channel") |
- .beEqualToArray(expected_right); |
- |
- task.done(); |
}); |
- }); |
- |
- audit.run(); |
- </script> |
-</body> |
- |
+ audit.run(); |
+ </script> |
+ </body> |
</html> |