#include "wtf/StdLibExtras.h"
#include <algorithm>
-using namespace std;
-
-namespace WebCore {
+namespace blink {
using namespace VectorMath;
-PassRefPtr<OscillatorNode> OscillatorNode::create(AudioContext* context, float sampleRate)
+OscillatorNode* OscillatorNode::create(AudioContext* context, float sampleRate)
{
- return adoptRef(new OscillatorNode(context, sampleRate));
+ return new OscillatorNode(context, sampleRate);
}
OscillatorNode::OscillatorNode(AudioContext* context, float sampleRate)
, m_phaseIncrements(AudioNode::ProcessingSizeInFrames)
, m_detuneValues(AudioNode::ProcessingSizeInFrames)
{
- ScriptWrappable::init(this);
setNodeType(NodeTypeOscillator);
// Use musical pitch standard A440 as a default.
- m_frequency = AudioParam::create(context, "frequency", 440, 0, 100000);
+ m_frequency = AudioParam::create(context, 440);
// Default to no detuning.
- m_detune = AudioParam::create(context, "detune", 0, -4800, 4800);
+ m_detune = AudioParam::create(context, 0);
// Sets up default wavetable.
setType(m_type);
// An oscillator is always mono.
- addOutput(adoptPtr(new AudioNodeOutput(this, 1)));
+ addOutput(AudioNodeOutput::create(this, 1));
initialize();
}
OscillatorNode::~OscillatorNode()
{
+ ASSERT(!isInitialized());
+}
+
+void OscillatorNode::dispose()
+{
uninitialize();
+ AudioScheduledSourceNode::dispose();
}
String OscillatorNode::type() const
setType(SAWTOOTH);
else if (type == "triangle")
setType(TRIANGLE);
- else
- ASSERT_NOT_REACHED();
}
bool OscillatorNode::setType(unsigned type)
switch (type) {
case SINE: {
- DEFINE_STATIC_REF(PeriodicWave, periodicWaveSine, (PeriodicWave::createSine(sampleRate)));
+ DEFINE_STATIC_LOCAL(Persistent<PeriodicWave>, periodicWaveSine, (PeriodicWave::createSine(sampleRate)));
periodicWave = periodicWaveSine;
break;
}
case SQUARE: {
- DEFINE_STATIC_REF(PeriodicWave, periodicWaveSquare, (PeriodicWave::createSquare(sampleRate)));
+ DEFINE_STATIC_LOCAL(Persistent<PeriodicWave>, periodicWaveSquare, (PeriodicWave::createSquare(sampleRate)));
periodicWave = periodicWaveSquare;
break;
}
case SAWTOOTH: {
- DEFINE_STATIC_REF(PeriodicWave, periodicWaveSawtooth, (PeriodicWave::createSawtooth(sampleRate)));
+ DEFINE_STATIC_LOCAL(Persistent<PeriodicWave>, periodicWaveSawtooth, (PeriodicWave::createSawtooth(sampleRate)));
periodicWave = periodicWaveSawtooth;
break;
}
case TRIANGLE: {
- DEFINE_STATIC_REF(PeriodicWave, periodicWaveTriangle, (PeriodicWave::createTriangle(sampleRate)));
+ DEFINE_STATIC_LOCAL(Persistent<PeriodicWave>, periodicWaveTriangle, (PeriodicWave::createTriangle(sampleRate)));
periodicWave = periodicWaveTriangle;
break;
}
float frequency = 0;
float* higherWaveData = 0;
float* lowerWaveData = 0;
- float tableInterpolationFactor;
+ float tableInterpolationFactor = 0;
if (!hasSampleAccurateValues) {
frequency = m_frequency->smoothedValue();
return !isPlayingOrScheduled() || hasFinished() || !m_periodicWave.get();
}
-} // namespace WebCore
+void OscillatorNode::trace(Visitor* visitor)
+{
+ visitor->trace(m_frequency);
+ visitor->trace(m_detune);
+ visitor->trace(m_periodicWave);
+ AudioScheduledSourceNode::trace(visitor);
+}
+
+} // namespace blink
#endif // ENABLE(WEB_AUDIO)