| <!doctype html> |
| <meta charset=utf-8> |
| <title></title> |
| <script src=/resources/testharness.js></script> |
| <script src=/resources/testharnessreport.js></script> |
| <script> |
| |
| // This value is purposefuly not aligned on a 128-block boundary so that we test |
| // that the PannerNode position audioparam is a-rate. |
| const POSITION_CHANGE_FRAME = 1111; |
| |
| promise_test(function(t) { |
| var ac = new OfflineAudioContext(2, 2048, 44100); |
| var panner = ac.createPanner(); |
| panner.positionX.value = -1; |
| panner.positionY.value = -1; |
| panner.positionZ.value = 1; |
| panner.positionX.setValueAtTime(1, POSITION_CHANGE_FRAME/ac.sampleRate); |
| var osc = ac.createOscillator(); |
| osc.connect(panner); |
| panner.connect(ac.destination); |
| osc.start() |
| return ac.startRendering().then(function(buffer) { |
| var left = buffer.getChannelData(0); |
| var right = buffer.getChannelData(1); |
| for (var i = 0; i < 2048; ++i) { |
| if (i < POSITION_CHANGE_FRAME) { |
| assert_true(Math.abs(left[i]) >= Math.abs(right[i]), "index " + i + " should be on the left"); |
| } else { |
| assert_true(Math.abs(left[i]) < Math.abs(right[i]), "index " + i + " should be on the right"); |
| } |
| } |
| }); |
| }, "PannerNode AudioParam automation works properly"); |
| |
| </script> |