| <!doctype html> |
| <html> |
| <head> |
| <title>Test AudioBufferSource.onended</title> |
| <style type="text/css"> |
| header { |
| margin: 20px 0; |
| } |
| #results { |
| white-space: pre; |
| font-family: monospace; |
| } |
| </style> |
| </head> |
| |
| <body> |
| <h1>Test AudioBufferSource.onended</h1> |
| |
| <p>Tests that the onended event is called. This test cannot be run in an offline context |
| because the onended event is always called. |
| </p> |
| |
| <p>Press "Test" button to run the test. You should hear two tones, each lasting 1/2 second. If |
| you do not, the test failed and onended was not correctly fired to generate the second tone. |
| There should also be messages displayed for each tone played. |
| </p> |
| |
| <button onclick="runTest()">Test</button> |
| |
| <header>Results</header> |
| <div id="results"></div> |
| |
| <script> |
| // This is a slightly modified version of http://jsfiddle.net/ep4zm233/ |
| |
| var context = new AudioContext(); |
| |
| function runTest() { |
| log("Starting test"); |
| |
| // Create two buffers at a sample rate of 8000. We're assuming 8000 is not the actual |
| // context sampleRate so that resampling happens during the play back of the buffers. |
| var bufferRate = 8000; |
| var bufferSeconds = 0.5; |
| var bufferFrames = bufferSeconds * bufferRate; |
| |
| // The tone buffers at 400Hz and 600 Hz. |
| var sin400 = context.createBuffer(1, bufferFrames, bufferRate); |
| var sin600 = context.createBuffer(1, bufferFrames, bufferRate); |
| |
| var d400 = sin400.getChannelData(0); |
| var d600 = sin600.getChannelData(0); |
| |
| var omega = 2*Math.PI/bufferRate; |
| |
| for (var k = 0; k < bufferFrames; ++k) { |
| d400[k] = Math.sin(omega * 400 * k); |
| d600[k] = Math.sin(omega * 600 * k); |
| } |
| |
| var s1 = context.createBufferSource(); |
| |
| s1.onended = function () { |
| // Create a new source using the 600Hz buffer and play it as soon as the onended event for |
| // s1 has fired. |
| var s2 = context.createBufferSource(); |
| s2.connect(context.destination); |
| s2.buffer = sin600; |
| s2.start(); |
| log("Tone 2"); |
| } |
| |
| // Set up the 400 Hz buffer and play it. |
| s1.buffer = sin400; |
| |
| s1.connect(context.destination); |
| s1.start(); |
| log("Tone 1"); |
| } |
| |
| function clearResults() { |
| var results = document.querySelector("#results"); |
| results.textContent = ""; |
| } |
| |
| function log(message) { |
| console.log(message); |
| var results = document.querySelector("#results"); |
| results.textContent += message + "\n"; |
| } |
| </script> |
| |
| |
| |
| |
| </body> |
| </html> |