| <!doctype html> |
| <html> |
| <head> |
| <script src="../resources/js-test.js"></script> |
| <script src="resources/compatibility.js"></script> |
| <script src="resources/audio-testing.js"></script> |
| <title>Test getFloatFrequencyData With Zero Inputs</title> |
| </head> |
| |
| <body> |
| <script> |
| description("Test AnalyserNode getFloatFrequencyData With Zero-Valued Input"); |
| window.jsTestIsAsync = true; |
| |
| var sampleRate = 48000; |
| |
| // Render enough data to run the test. |
| var renderFrames = 2*1024; |
| var renderDuration = renderFrames / sampleRate; |
| |
| var audit = Audit.createTaskRunner(); |
| |
| |
| // Test that getFloatFrequencyData returns -Infinity when the input is all-zeroes. |
| audit.defineTask("zero input", function (done) { |
| var context = new OfflineAudioContext(1, renderFrames, sampleRate); |
| |
| // Constant source of 0's. |
| var source = context.createBufferSource(); |
| source.buffer = createConstantBuffer(context, 1, 0); |
| source.loop = true; |
| |
| // Create analyser and use some non-default minDecibels value. |
| var analyser = context.createAnalyser(); |
| analyser.minDecibels = -123; |
| |
| source.connect(analyser); |
| analyser.connect(context.destination); |
| |
| source.start(); |
| |
| // Suspend after some number of frames and grab the float frequency data. |
| context.suspend(1024 / sampleRate).then(function () { |
| var f = new Float32Array(analyser.frequencyBinCount); |
| analyser.getFloatFrequencyData(f); |
| |
| Should("getFloatFrequencyData() with zero-valued input", f) |
| .beConstantValueOf(-Infinity); |
| }).then(context.resume.bind(context)); |
| |
| context.startRendering().then(done); |
| }); |
| |
| audit.defineTask("finish", function (done) { |
| finishJSTest(); |
| done(); |
| }); |
| |
| audit.runTasks(); |
| |
| </script> |
| </body> |
| </html> |