| <!DOCTYPE html> |
| <html> |
| <head> |
| <title> |
| Test Start Grain with Delayed Buffer Setting |
| </title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/webaudio/resources/audit-util.js"></script> |
| <script src="/webaudio/resources/audit.js"></script> |
| </head> |
| <body> |
| <script id="layout-test-code"> |
| let audit = Audit.createTaskRunner(); |
| let context; |
| let source; |
| let buffer; |
| let renderedData; |
| |
| let sampleRate = 44100; |
| |
| let testDurationSec = 1; |
| let testDurationSamples = testDurationSec * sampleRate; |
| let startTime = 0.9 * testDurationSec; |
| |
| audit.define( |
| 'Test setting the source buffer after starting the grain', |
| function(task, should) { |
| context = |
| new OfflineAudioContext(1, testDurationSamples, sampleRate); |
| |
| buffer = createConstantBuffer(context, testDurationSamples, 1); |
| source = context.createBufferSource(); |
| source.connect(context.destination); |
| |
| // Start the source BEFORE we set the buffer. The grain offset and |
| // duration aren't important, as long as we specify some offset. |
| source.start(startTime, .1); |
| source.buffer = buffer; |
| |
| // Render it! |
| context.startRendering() |
| .then(function(buffer) { |
| checkResult(buffer, should); |
| }) |
| .then(task.done.bind(task)); |
| ; |
| }); |
| |
| function checkResult(buffer, should) { |
| let success = false; |
| |
| renderedData = buffer.getChannelData(0); |
| |
| // Check that the rendered data is not all zeroes. Any non-zero data |
| // means the test passed. |
| let startFrame = Math.round(startTime * sampleRate); |
| for (k = 0; k < renderedData.length; ++k) { |
| if (renderedData[k]) { |
| success = true; |
| break; |
| } |
| } |
| |
| should(success, 'Buffer was played').beTrue(); |
| } |
| |
| audit.run(); |
| </script> |
| </body> |
| </html> |