Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | 1 <!doctype> |
| 2 <html> | 2 <html> |
| 3 <head> | 3 <head> |
| 4 <script src="../../resources/js-test.js"></script> | 4 <script src="../../resources/testharness.js"></script> |
| 5 <script src="../../resources/testharnessreport.js"></script> | |
| 5 <script src="../resources/audit-util.js"></script> | 6 <script src="../resources/audit-util.js"></script> |
| 6 <script src="../resources/audio-testing.js"></script> | 7 <script src="../resources/audit.js"></script> |
| 7 <script src="../resources/note-grain-on-testing.js"></script> | 8 <script src="../resources/note-grain-on-testing.js"></script> |
| 8 </head> | 9 </head> |
| 9 | 10 |
| 10 <body> | 11 <body> |
| 11 <div id="description"></div> | 12 <div id="description"></div> |
| 12 <div id="console"></div> | 13 <div id="console"></div> |
| 13 | 14 |
| 14 <script> | 15 <script> |
| 15 description("Test noteGrainOn offset rendering."); | 16 let audit = Audit.createTaskRunner(); |
| 16 | 17 |
| 17 // To test noteGrainOn, a single ramp signal is created. | 18 // To test noteGrainOn, a single ramp signal is created. |
| 18 // Various sections of the ramp are rendered by noteGrainOn() at | 19 // Various sections of the ramp are rendered by noteGrainOn() at |
| 19 // different times, and we verify that the actual output | 20 // different times, and we verify that the actual output |
| 20 // consists of the correct section of the ramp at the correct | 21 // consists of the correct section of the ramp at the correct |
| 21 // time. | 22 // time. |
| 22 | 23 |
| 23 var linearRampBuffer; | 24 let linearRampBuffer; |
| 24 | 25 |
| 25 // Array of the grain offset used for each ramp played. | 26 // Array of the grain offset used for each ramp played. |
| 26 var grainOffsetTime = []; | 27 let grainOffsetTime = []; |
| 27 | 28 |
| 28 // Verify the received signal is a ramp from the correct section | 29 // Verify the received signal is a ramp from the correct section |
| 29 // of our ramp signal. | 30 // of our ramp signal. |
| 30 function verifyGrain(renderedData, startFrame, endFrame, grainIndex) { | 31 function verifyGrain(renderedData, startFrame, endFrame, grainIndex) { |
| 31 var grainOffsetFrame = timeToSampleFrame(grainOffsetTime[grainIndex], sampleRate); | 32 let grainOffsetFrame = timeToSampleFrame(grainOffsetTime[ |
| 32 var grainFrameLength = endFrame - startFrame; | 33 grainIndex], sampleRate); |
| 33 var ramp = linearRampBuffer.getChannelData(0); | 34 let grainFrameLength = endFrame - startFrame; |
| 34 var isCorrect = true; | 35 let ramp = linearRampBuffer.getChannelData(0); |
| 36 let isCorrect = true; | |
| 35 | 37 |
| 36 var expected; | 38 let expected; |
| 37 var actual; | 39 let actual; |
| 38 var frame; | 40 let frame; |
| 39 | 41 |
| 40 for (var k = 0; k < grainFrameLength; ++k) { | 42 for (let k = 0; k < grainFrameLength; ++k) { |
| 41 if (renderedData[startFrame + k] != ramp[grainOffsetFrame + k]) { | 43 if (renderedData[startFrame + k] != ramp[grainOffsetFrame + |
| 44 k]) { | |
| 42 expected = ramp[grainOffsetFrame + k]; | 45 expected = ramp[grainOffsetFrame + k]; |
| 43 actual = renderedData[startFrame + k]; | 46 actual = renderedData[startFrame + k]; |
| 44 frame = startFrame + k; | 47 frame = startFrame + k; |
| 45 isCorrect = false; | 48 isCorrect = false; |
| 46 break; | 49 break; |
| 47 } | 50 } |
| 48 } | 51 } |
| 49 return { verified: isCorrect, | 52 return { |
| 50 expected : expected , | 53 verified: isCorrect, |
| 51 actual : actual, | 54 expected: expected, |
| 52 frame : frame }; | 55 actual: actual, |
| 56 frame: frame | |
| 57 }; | |
| 53 } | 58 } |
| 54 | 59 |
| 55 function checkResult(event) { | 60 function checkResult(buffer, should) { |
| 56 var buffer = event.renderedBuffer; | |
| 57 renderedData = buffer.getChannelData(0); | 61 renderedData = buffer.getChannelData(0); |
|
hongchan
2017/01/20 17:46:09
This is bad. We need |let| here. I know it happene
Raymond Toy
2017/01/20 19:37:10
renderedData is defined in note-grain-on-testing.j
| |
| 58 var nSamples = renderedData.length; | 62 let nSamples = renderedData.length; |
| 59 | |
| 60 var success = true; | |
| 61 | 63 |
| 62 // Number of grains that we found that have incorrect data. | 64 // Number of grains that we found that have incorrect data. |
| 63 var invalidGrainDataCount = 0; | 65 let invalidGrainDataCount = 0; |
| 64 | 66 |
| 65 var startEndFrames = findStartAndEndSamples(renderedData); | 67 let startEndFrames = findStartAndEndSamples(renderedData); |
| 66 | 68 |
| 67 // Verify the start and stop times. Not strictly needed for | 69 // Verify the start and stop times. Not strictly needed for |
| 68 // this test, but it's useful to know that if the ramp data | 70 // this test, but it's useful to know that if the ramp data |
| 69 // appears to be incorrect. | 71 // appears to be incorrect. |
| 70 success = success && verifyStartAndEndFrames(startEndFrames); | 72 verifyStartAndEndFrames(startEndFrames, should); |
| 71 | 73 |
| 72 // Loop through each of the rendered grains and check that | 74 // Loop through each of the rendered grains and check that |
| 73 // each grain contains our expected ramp. | 75 // each grain contains our expected ramp. |
| 74 for (var k = 0; k < startEndFrames.start.length; ++k) { | 76 for (let k = 0; k < startEndFrames.start.length; ++k) { |
| 75 // Verify that the rendered data matches the expected | 77 // Verify that the rendered data matches the expected |
| 76 // section of our ramp signal. | 78 // section of our ramp signal. |
| 77 var result = verifyGrain(renderedData, startEndFrames.start[k], st artEndFrames.end[k], k); | 79 let result = verifyGrain(renderedData, startEndFrames.start[ |
| 78 | 80 k], startEndFrames.end[k], k); |
| 79 if (!result.verified) { | 81 should(result.verified, "Pulse " + k + " contained the expected da ta") |
|
hongchan
2017/01/20 17:46:09
Should be wrapped.
Raymond Toy
2017/01/20 19:37:10
Done.
| |
| 80 testFailed("Grain " + k + " incorrect. Expected " + result.ex pected + " but received " + result.actual + " at sample frame " + result.frame); | 82 .beTrue(); |
| 81 ++invalidGrainDataCount; | |
| 82 success = false; | |
| 83 } | |
| 84 } | 83 } |
| 85 | 84 should(invalidGrainDataCount, |
| 86 if (!invalidGrainDataCount) { | 85 "Number of grains that did not contain the expected data" |
| 87 testPassed("All " + numberOfTests + " grains contained the correct data."); | 86 ) |
| 88 } else { | 87 .beEqualTo(0); |
| 89 testFailed(invalidGrainDataCount + " grains out of " + numberOfTes ts + " did not contain the expected data."); | |
| 90 success = false; | |
| 91 } | |
| 92 | |
| 93 if (success) { | |
| 94 testPassed("noteGrainOn offset rendering tests passed."); | |
| 95 } else { | |
| 96 testFailed("noteGrainOn offset rendering tests failed."); | |
| 97 } | |
| 98 | |
| 99 finishJSTest(); | |
| 100 } | 88 } |
| 101 | 89 |
| 102 function runTest() { | 90 audit.define("note-grain-on-play", function(task, should) { |
| 103 if (window.testRunner) { | 91 task.describe("Test noteGrainOn offset rendering"); |
| 104 testRunner.dumpAsText(); | |
| 105 testRunner.waitUntilDone(); | |
| 106 } | |
| 107 | |
| 108 window.jsTestIsAsync = true; | |
| 109 | |
| 110 // Create offline audio context. | 92 // Create offline audio context. |
| 111 context = new OfflineAudioContext(2, sampleRate * renderTime, sampleRa te); | 93 context = new OfflineAudioContext(2, sampleRate * |
| 94 renderTime, sampleRate); | |
| 112 | 95 |
| 113 // Create a linear ramp for testing noteGrainOn. | 96 // Create a linear ramp for testing noteGrainOn. |
| 114 linearRampBuffer = createSignalBuffer(context, | 97 linearRampBuffer = createSignalBuffer(context, |
| 115 function(k) { | 98 function(k) { |
| 116 // Want the ramp to start | 99 // Want the ramp to start |
| 117 // with 1, not 0. | 100 // with 1, not 0. |
| 118 return k + 1; | 101 return k + 1; |
| 119 }); | 102 }); |
| 120 | 103 |
| 121 var grainInfo = playAllGrains(context, linearRampBuffer, numberOfTests ); | 104 let grainInfo = playAllGrains(context, linearRampBuffer, |
| 105 numberOfTests); | |
| 122 | 106 |
| 123 grainOffsetTime = grainInfo.grainOffsetTimes; | 107 grainOffsetTime = grainInfo.grainOffsetTimes; |
| 124 | 108 |
| 125 context.oncomplete = checkResult; | 109 context.startRendering() |
| 126 context.startRendering(); | 110 .then(function(audioBuffer) { |
| 127 } | 111 checkResult(audioBuffer, should); |
|
hongchan
2017/01/20 17:46:09
This does not return a promise and it's synchronou
Raymond Toy
2017/01/20 19:37:10
Done.
| |
| 112 }) | |
| 113 .then(task.done.bind(task)); | |
| 114 }); | |
| 128 | 115 |
| 129 runTest(); | 116 audit.run(); |
| 130 successfullyParsed = true; | |
| 131 | |
| 132 </script> | 117 </script> |
| 133 | |
| 134 </body> | 118 </body> |
| 135 </html> | 119 </html> |
| OLD | NEW |