| OLD | NEW |
| (Empty) | |
| 1 <!doctype html> |
| 2 <html> |
| 3 <head> |
| 4 <title>Test k-rate AudioParams</title> |
| 5 <script src="../../resources/testharness.js"></script> |
| 6 <script src="../../resources/testharnessreport.js"></script> |
| 7 <script src="../resources/audit-util.js"></script> |
| 8 <script src="../resources/audit.js"></script> |
| 9 </head> |
| 10 |
| 11 <body> |
| 12 <script> |
| 13 let sampleRate = 48000; |
| 14 let renderLength = 2048; |
| 15 let eventEndTime = 0.015; |
| 16 |
| 17 let audit = Audit.createTaskRunner() |
| 18 |
| 19 audit.define("validate", function (task, should) { |
| 20 task.describe("Validate test parameters"); |
| 21 should(eventEndTime, "eventTime").beLessThan(renderLength / sampleRate); |
| 22 task.done(); |
| 23 }); |
| 24 |
| 25 audit.define("playbackrate+detune", function (task, should) { |
| 26 task.describe("Test k-rate AudioBufferSourceNode AudioParams"); |
| 27 |
| 28 let context = new OfflineAudioContext(1, renderLength, sampleRate); |
| 29 let buffer = createConstantBuffer(context, renderLength, 1); |
| 30 let node = new AudioBufferSourceNode(context, { |
| 31 buffer: buffer |
| 32 }); |
| 33 |
| 34 node.connect(context.destination); |
| 35 |
| 36 // Initialize detune and playbackRate to some non-zero value (because |
| 37 // we're using exponential ramps. Then add exponential ramp to some |
| 38 // non-zero end value. The actual values don't matter as long as |
| 39 // they're strictly positive. |
| 40 node.detune.setValueAtTime(0.125, 0); |
| 41 node.playbackRate.setValueAtTime(1, 0); |
| 42 |
| 43 node.detune.exponentialRampToValueAtTime(0.75, 0.015); |
| 44 node.playbackRate.exponentialRampToValueAtTime(0.5, 0.015); |
| 45 |
| 46 node.start(); |
| 47 |
| 48 context.startRendering() |
| 49 .then(function () { |
| 50 // The final values for each attribute should be the expected final |
| 51 // value. |
| 52 should(node.detune.value, "Final node.detune.value") |
| 53 .beEqualTo(0.75); |
| 54 should(node.playbackRate.value, "Final node.playbackRate.value") |
| 55 .beEqualTo(0.5); |
| 56 }) |
| 57 .then(task.done.bind(task)); |
| 58 }); |
| 59 |
| 60 audit.define("panner-k-rate", function (task, should) { |
| 61 task.describe( |
| 62 "Test k-rate PannerNode and AudioListenerNode AudioParams"); |
| 63 |
| 64 let context = new OfflineAudioContext(1, renderLength, sampleRate); |
| 65 let buffer = createConstantBuffer(context, renderLength, 1); |
| 66 let source = new AudioBufferSourceNode(context, { |
| 67 buffer: buffer |
| 68 }); |
| 69 |
| 70 let panner = new PannerNode(context, {panningModel: "HRTF"}); |
| 71 |
| 72 source.connect(panner).connect(context.destination); |
| 73 |
| 74 // Initialize the k-rate parameters to some positive value. Then add |
| 75 // exponential ramp to some non-zero end value. The actual values don't |
| 76 // matter as long as they're strictly positive. |
| 77 panner.orientationX.setValueAtTime(1, 0); |
| 78 panner.orientationY.setValueAtTime(1, 0); |
| 79 panner.orientationZ.setValueAtTime(1, 0); |
| 80 |
| 81 panner.positionX.setValueAtTime(5, 0); |
| 82 panner.positionY.setValueAtTime(5, 0); |
| 83 panner.positionZ.setValueAtTime(5, 0); |
| 84 |
| 85 context.listener.forwardX.setValueAtTime(1, 0); |
| 86 context.listener.forwardY.setValueAtTime(1, 0); |
| 87 context.listener.forwardZ.setValueAtTime(1, 0); |
| 88 |
| 89 context.listener.positionX.setValueAtTime(.5, 0); |
| 90 context.listener.positionY.setValueAtTime(.5, 0); |
| 91 context.listener.positionZ.setValueAtTime(.5, 0); |
| 92 |
| 93 context.listener.upX.setValueAtTime(1, 0); |
| 94 context.listener.upY.setValueAtTime(1, 0); |
| 95 context.listener.upZ.setValueAtTime(1, 0); |
| 96 |
| 97 panner.orientationX.exponentialRampToValueAtTime(2.5, 0.015); |
| 98 panner.orientationY.exponentialRampToValueAtTime(2.5, 0.015); |
| 99 panner.orientationZ.exponentialRampToValueAtTime(2.5, 0.015); |
| 100 |
| 101 panner.positionX.exponentialRampToValueAtTime(11, 0.015); |
| 102 panner.positionY.exponentialRampToValueAtTime(11, 0.015); |
| 103 panner.positionZ.exponentialRampToValueAtTime(11, 0.015); |
| 104 |
| 105 context.listener.forwardX.exponentialRampToValueAtTime(3, 0.015); |
| 106 context.listener.forwardY.exponentialRampToValueAtTime(3, 0.015); |
| 107 context.listener.forwardZ.exponentialRampToValueAtTime(3, 0.015); |
| 108 |
| 109 context.listener.positionX.exponentialRampToValueAtTime(0.5, 0.015); |
| 110 context.listener.positionY.exponentialRampToValueAtTime(0.5, 0.015); |
| 111 context.listener.positionZ.exponentialRampToValueAtTime(0.5, 0.015); |
| 112 |
| 113 context.listener.upX.exponentialRampToValueAtTime(4, 0.015); |
| 114 context.listener.upY.exponentialRampToValueAtTime(4, 0.015); |
| 115 context.listener.upZ.exponentialRampToValueAtTime(4, 0.015); |
| 116 |
| 117 source.start(); |
| 118 |
| 119 context.startRendering() |
| 120 .then(function () { |
| 121 // The final values for each attribute should be the expected final |
| 122 // value. |
| 123 should(panner.orientationX.value, |
| 124 "Final panner.orientationX.value") |
| 125 .beEqualTo(2.5); |
| 126 should(panner.orientationY.value, |
| 127 "Final panner.orientationY.value") |
| 128 .beEqualTo(2.5); |
| 129 should(panner.orientationZ.value, |
| 130 "Final panner.orientationZ.value") |
| 131 .beEqualTo(2.5); |
| 132 should(panner.positionX.value, "Final panner.positionX.value") |
| 133 .beEqualTo(11); |
| 134 should(panner.positionY.value, "Final panner.positionY.value") |
| 135 .beEqualTo(11); |
| 136 should(panner.positionZ.value, "Final panner.positionZ.value") |
| 137 .beEqualTo(11); |
| 138 |
| 139 should(context.listener.forwardX.value, |
| 140 "Final context.listener.forwardX.value") |
| 141 .beEqualTo(3); |
| 142 should(context.listener.forwardY.value, |
| 143 "Final context.listener.forwardY.value") |
| 144 .beEqualTo(3); |
| 145 should(context.listener.forwardZ.value, |
| 146 "Final context.listener.forwardZ.value") |
| 147 .beEqualTo(3); |
| 148 should(context.listener.positionX.value, |
| 149 "Final context.listener.positionX.value") |
| 150 .beEqualTo(0.5); |
| 151 should(context.listener.positionY.value, |
| 152 "Final context.listener.positionY.value") |
| 153 .beEqualTo(0.5); |
| 154 should(context.listener.positionZ.value, |
| 155 "Final context.listener.positionZ.value") |
| 156 .beEqualTo(0.5); |
| 157 should(context.listener.upX.value, |
| 158 "Final context.listener.upX.value") |
| 159 .beEqualTo(4); |
| 160 should(context.listener.upY.value, |
| 161 "Final context.listener.upY.value") |
| 162 .beEqualTo(4); |
| 163 should(context.listener.upZ.value, |
| 164 "Final context.listener.upZ.value") |
| 165 .beEqualTo(4); |
| 166 }) |
| 167 .then(task.done.bind(task)); |
| 168 }); |
| 169 |
| 170 audit.run(); |
| 171 </script> |
| 172 </body> |
| 173 </html> |
| OLD | NEW |