Diff
Modified: trunk/LayoutTests/ChangeLog (109665 => 109666)
--- trunk/LayoutTests/ChangeLog 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/LayoutTests/ChangeLog 2012-03-03 22:48:55 UTC (rev 109666)
@@ -1,5 +1,21 @@
2012-03-03 Raymond Toy <[email protected]>
+ DelayNode has a fixed one second max delay time
+ https://bugs.webkit.org/show_bug.cgi?id=78758
+
+ Reviewed by Chris Rogers.
+
+ * webaudio/resources/delay-testing.js: Added more informative
+ messages.
+ * webaudio/delaynode-expected.txt: Updated result for more
+ informative messages
+ * webaudio/delaynode-scheduling-expected.txt: Updated result for
+ more informative messages.
+ * webaudio/delaynode-maxdelay-expected.txt: Added
+ * webaudio/delaynode-maxdelay.html: Added
+
+2012-03-03 Raymond Toy <[email protected]>
+
Biquad getFrequencyResponse needs a layout test.
https://bugs.webkit.org/show_bug.cgi?id=79503
Modified: trunk/LayoutTests/webaudio/delaynode-expected.txt (109665 => 109666)
--- trunk/LayoutTests/webaudio/delaynode-expected.txt 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/LayoutTests/webaudio/delaynode-expected.txt 2012-03-03 22:48:55 UTC (rev 109666)
@@ -2,7 +2,7 @@
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS Test signal was correctly delayed.
+PASS Test signal was correctly delayed by 0.5 sec.
PASS successfullyParsed is true
TEST COMPLETE
Copied: trunk/LayoutTests/webaudio/delaynode-maxdelay-expected.txt (from rev 109665, trunk/LayoutTests/webaudio/delaynode-expected.txt) (0 => 109666)
--- trunk/LayoutTests/webaudio/delaynode-maxdelay-expected.txt (rev 0)
+++ trunk/LayoutTests/webaudio/delaynode-maxdelay-expected.txt 2012-03-03 22:48:55 UTC (rev 109666)
@@ -0,0 +1,9 @@
+Tests basic functionality of DelayNode with a non-default max delay time.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS Test signal was correctly delayed by 1.5 sec.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/webaudio/delaynode-maxdelay.html (0 => 109666)
--- trunk/LayoutTests/webaudio/delaynode-maxdelay.html (rev 0)
+++ trunk/LayoutTests/webaudio/delaynode-maxdelay.html 2012-03-03 22:48:55 UTC (rev 109666)
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+<script src=""
+<script src=""
+</head>
+
+<body>
+
+<div id="description"></div>
+<div id="console"></div>
+
+<script>
+description("Tests basic functionality of DelayNode with a non-default max delay time.");
+
+function runTest() {
+ if (window.layoutTestController) {
+ layoutTestController.overridePreference("WebKitWebAudioEnabled", "1");
+ layoutTestController.dumpAsText();
+ layoutTestController.waitUntilDone();
+ }
+
+ window.jsTestIsAsync = true;
+
+ // Create offline audio context.
+ var context = new webkitAudioContext(1, sampleRate * renderLengthSeconds, sampleRate);
+ var toneBuffer = createToneBuffer(context, 20, 20 * toneLengthSeconds, sampleRate); // 20Hz tone
+
+ var bufferSource = context.createBufferSource();
+ bufferSource.buffer = toneBuffer;
+
+ // Create a delay node with an explicit max delay time (greater than the default of 1 second).
+ var delay = context.createDelayNode(2);
+ // Set the delay time to a value greater than the default max delay so we can verify the delay
+ // is working for this case.
+ delayTimeSeconds = 1.5;
+ delay.delayTime.value = delayTimeSeconds;
+
+ bufferSource.connect(delay);
+ delay.connect(context.destination);
+ bufferSource.noteOn(0);
+
+ context._oncomplete_ = checkDelayedResult(toneBuffer);
+ context.startRendering();
+}
+
+runTest();
+
+</script>
+
+<script src=""
+</body>
+</html>
Modified: trunk/LayoutTests/webaudio/delaynode-scheduling-expected.txt (109665 => 109666)
--- trunk/LayoutTests/webaudio/delaynode-scheduling-expected.txt 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/LayoutTests/webaudio/delaynode-scheduling-expected.txt 2012-03-03 22:48:55 UTC (rev 109666)
@@ -2,7 +2,7 @@
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS Test signal was correctly delayed.
+PASS Test signal was correctly delayed by 0.5 sec.
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/LayoutTests/webaudio/resources/delay-testing.js (109665 => 109666)
--- trunk/LayoutTests/webaudio/resources/delay-testing.js 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/LayoutTests/webaudio/resources/delay-testing.js 2012-03-03 22:48:55 UTC (rev 109666)
@@ -37,6 +37,7 @@
if (i < delayTimeFrames) {
// Check that initial portion is 0 (since signal is delayed).
if (renderedData[i] != 0) {
+ testFailed("Initial portion is not 0 at frame " + i);
success = false;
break;
}
@@ -44,12 +45,14 @@
// Make sure that the tone data is delayed by exactly the expected number of frames.
var j = i - delayTimeFrames;
if (renderedData[i] != sourceData[j]) {
+ testFailed("Actual data does not match expected data at frame " + i);
success = false;
break;
}
} else {
// Make sure we have silence after the delayed tone.
if (renderedData[i] != 0) {
+ testFailed("Final portion is not 0 at frame " + i);
success = false;
break;
}
@@ -57,9 +60,9 @@
}
if (success) {
- testPassed("Test signal was correctly delayed.");
+ testPassed("Test signal was correctly delayed by " + delayTimeSeconds + " sec.");
} else {
- testFailed("Test signal was not correctly delayed.");
+ testFailed("Test signal was not correctly delayed by " + delayTimeSeconds + " sec.");
}
finishJSTest();
Modified: trunk/Source/WebCore/ChangeLog (109665 => 109666)
--- trunk/Source/WebCore/ChangeLog 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/ChangeLog 2012-03-03 22:48:55 UTC (rev 109666)
@@ -1,5 +1,43 @@
2012-03-03 Raymond Toy <[email protected]>
+ DelayNode has a fixed one second max delay time
+ https://bugs.webkit.org/show_bug.cgi?id=78758
+
+ Change DelayNode to accept an optional parameter to specify the
+ maximum delay allowed. If not specified, the default is 1 sec.
+
+ Reviewed by Chris Rogers.
+
+ Test: webaudio/delaynode-maxdelay.html
+ webaudio/delaynode-maxdelay-expected.txt
+
+ * webaudio/AudioContext.cpp:
+ (WebCore::AudioContext::createDelayNode): Allow maxDelayTime
+ parameter to specify max delay.
+ * webaudio/AudioContext.h: Allow maxDelayTime
+ parameter to specify max delay but default to 1.
+ (AudioContext):
+ * webaudio/AudioContext.idl: createDelayNode takes optional max
+ delay time parameter.
+ * webaudio/DelayDSPKernel.cpp:
+ (WebCore::DelayDSPKernel::DelayDSPKernel): Remove unused
+ DefaultMaxDelayTime. Set m_maxDelayTime from processor
+ maxDelayTime.
+ * webaudio/DelayNode.cpp:
+ (WebCore::DelayNode::DelayNode): Add maxDelayTime parameter.
+ * webaudio/DelayNode.h:
+ (WebCore::DelayNode::create): Add maxDelayTime parameter.
+ (DelayNode): Add maxDelayTime parameter.
+ * webaudio/DelayProcessor.cpp:
+ (WebCore::DelayProcessor::DelayProcessor): Add maxDelayTime
+ parameter.
+ * webaudio/DelayProcessor.h:
+ (DelayProcessor): Add maxDelayTime parameter.
+ (WebCore::DelayProcessor::maxDelayTime): New slot to hold
+ maxDelayTime.
+
+2012-03-03 Raymond Toy <[email protected]>
+
Simplified discreteTimeConstantForSampleRate
https://bugs.webkit.org/show_bug.cgi?id=78051
Modified: trunk/Source/WebCore/webaudio/AudioContext.cpp (109665 => 109666)
--- trunk/Source/WebCore/webaudio/AudioContext.cpp 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/AudioContext.cpp 2012-03-03 22:48:55 UTC (rev 109666)
@@ -445,9 +445,15 @@
PassRefPtr<DelayNode> AudioContext::createDelayNode()
{
+ const double defaultMaxDelayTime = 1;
+ return createDelayNode(defaultMaxDelayTime);
+}
+
+PassRefPtr<DelayNode> AudioContext::createDelayNode(double maxDelayTime)
+{
ASSERT(isMainThread());
lazyInitialize();
- return DelayNode::create(this, m_destinationNode->sampleRate());
+ return DelayNode::create(this, m_destinationNode->sampleRate(), maxDelayTime);
}
PassRefPtr<AudioChannelSplitter> AudioContext::createChannelSplitter()
Modified: trunk/Source/WebCore/webaudio/AudioContext.h (109665 => 109666)
--- trunk/Source/WebCore/webaudio/AudioContext.h 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/AudioContext.h 2012-03-03 22:48:55 UTC (rev 109666)
@@ -114,6 +114,7 @@
PassRefPtr<BiquadFilterNode> createBiquadFilter();
PassRefPtr<WaveShaperNode> createWaveShaper();
PassRefPtr<DelayNode> createDelayNode();
+ PassRefPtr<DelayNode> createDelayNode(double maxDelayTime);
PassRefPtr<LowPass2FilterNode> createLowPass2Filter();
PassRefPtr<HighPass2FilterNode> createHighPass2Filter();
PassRefPtr<AudioPannerNode> createPanner();
Modified: trunk/Source/WebCore/webaudio/AudioContext.idl (109665 => 109666)
--- trunk/Source/WebCore/webaudio/AudioContext.idl 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/AudioContext.idl 2012-03-03 22:48:55 UTC (rev 109666)
@@ -63,7 +63,7 @@
#endif
// Processing nodes
AudioGainNode createGainNode();
- DelayNode createDelayNode();
+ DelayNode createDelayNode(in [Optional] double maxDelayTime);
BiquadFilterNode createBiquadFilter();
WaveShaperNode createWaveShaper();
LowPass2FilterNode createLowPass2Filter();
Modified: trunk/Source/WebCore/webaudio/DelayDSPKernel.cpp (109665 => 109666)
--- trunk/Source/WebCore/webaudio/DelayDSPKernel.cpp 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/DelayDSPKernel.cpp 2012-03-03 22:48:55 UTC (rev 109666)
@@ -32,15 +32,13 @@
#include <algorithm>
using namespace std;
-
-const float DefaultMaxDelayTime = 1;
+
const float SmoothingTimeConstant = 0.020f; // 20ms
namespace WebCore {
DelayDSPKernel::DelayDSPKernel(DelayProcessor* processor)
: AudioDSPKernel(processor)
- , m_maxDelayTime(DefaultMaxDelayTime)
, m_writeIndex(0)
, m_firstTime(true)
{
@@ -48,7 +46,8 @@
if (!processor)
return;
- m_buffer.allocate(static_cast<size_t>(processor->sampleRate() * DefaultMaxDelayTime));
+ m_maxDelayTime = processor->maxDelayTime();
+ m_buffer.allocate(static_cast<size_t>(processor->sampleRate() * m_maxDelayTime));
m_buffer.zero();
m_smoothingRate = AudioUtilities::discreteTimeConstantForSampleRate(SmoothingTimeConstant, processor->sampleRate());
Modified: trunk/Source/WebCore/webaudio/DelayNode.cpp (109665 => 109666)
--- trunk/Source/WebCore/webaudio/DelayNode.cpp 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/DelayNode.cpp 2012-03-03 22:48:55 UTC (rev 109666)
@@ -30,10 +30,10 @@
namespace WebCore {
-DelayNode::DelayNode(AudioContext* context, float sampleRate)
+DelayNode::DelayNode(AudioContext* context, float sampleRate, double maxDelayTime)
: AudioBasicProcessorNode(context, sampleRate)
{
- m_processor = adoptPtr(new DelayProcessor(sampleRate, 1));
+ m_processor = adoptPtr(new DelayProcessor(sampleRate, 1, maxDelayTime));
delayTime()->setContext(context);
setNodeType(NodeTypeDelay);
}
Modified: trunk/Source/WebCore/webaudio/DelayNode.h (109665 => 109666)
--- trunk/Source/WebCore/webaudio/DelayNode.h 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/DelayNode.h 2012-03-03 22:48:55 UTC (rev 109666)
@@ -35,15 +35,15 @@
class DelayNode : public AudioBasicProcessorNode {
public:
- static PassRefPtr<DelayNode> create(AudioContext* context, float sampleRate)
+ static PassRefPtr<DelayNode> create(AudioContext* context, float sampleRate, double maxDelayTime)
{
- return adoptRef(new DelayNode(context, sampleRate));
+ return adoptRef(new DelayNode(context, sampleRate, maxDelayTime));
}
AudioParam* delayTime();
private:
- DelayNode(AudioContext*, float sampleRate);
+ DelayNode(AudioContext*, float sampleRate, double maxDelayTime);
DelayProcessor* delayProcessor() { return static_cast<DelayProcessor*>(processor()); }
};
Modified: trunk/Source/WebCore/webaudio/DelayProcessor.cpp (109665 => 109666)
--- trunk/Source/WebCore/webaudio/DelayProcessor.cpp 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/DelayProcessor.cpp 2012-03-03 22:48:55 UTC (rev 109666)
@@ -32,10 +32,11 @@
namespace WebCore {
-DelayProcessor::DelayProcessor(float sampleRate, unsigned numberOfChannels)
+DelayProcessor::DelayProcessor(float sampleRate, unsigned numberOfChannels, double maxDelayTime)
: AudioDSPKernelProcessor(sampleRate, numberOfChannels)
+ , m_maxDelayTime(maxDelayTime)
{
- m_delayTime = AudioParam::create("delayTime", 0.0, 0.0, 1.0);
+ m_delayTime = AudioParam::create("delayTime", 0.0, 0.0, maxDelayTime);
}
DelayProcessor::~DelayProcessor()
Modified: trunk/Source/WebCore/webaudio/DelayProcessor.h (109665 => 109666)
--- trunk/Source/WebCore/webaudio/DelayProcessor.h 2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/DelayProcessor.h 2012-03-03 22:48:55 UTC (rev 109666)
@@ -37,15 +37,17 @@
class DelayProcessor : public AudioDSPKernelProcessor {
public:
- DelayProcessor(float sampleRate, unsigned numberOfChannels);
+ DelayProcessor(float sampleRate, unsigned numberOfChannels, double maxDelayTime);
virtual ~DelayProcessor();
virtual PassOwnPtr<AudioDSPKernel> createKernel();
AudioParam* delayTime() const { return m_delayTime.get(); }
+ double maxDelayTime() { return m_maxDelayTime; }
private:
RefPtr<AudioParam> m_delayTime;
+ double m_maxDelayTime;
};
} // namespace WebCore