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