Index: ManualTests/webaudio/audiobuffersource-resampling-onended.html |
diff --git a/ManualTests/webaudio/audiobuffersource-resampling-onended.html b/ManualTests/webaudio/audiobuffersource-resampling-onended.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7d329e4d2ac0c0eb18675375cd251b42d7fe84b1 |
--- /dev/null |
+++ b/ManualTests/webaudio/audiobuffersource-resampling-onended.html |
@@ -0,0 +1,97 @@ |
+<!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> |