| Index: Source/modules/webaudio/OscillatorNode.cpp
|
| diff --git a/Source/modules/webaudio/OscillatorNode.cpp b/Source/modules/webaudio/OscillatorNode.cpp
|
| index 9c0edabf2dfc15344e5fd0880b814244077e6e4d..a3d12a8e75fb41c42d24a799d3cc64e667359e4c 100644
|
| --- a/Source/modules/webaudio/OscillatorNode.cpp
|
| +++ b/Source/modules/webaudio/OscillatorNode.cpp
|
| @@ -33,7 +33,7 @@
|
| #include "core/platform/audio/VectorMath.h"
|
| #include "modules/webaudio/AudioContext.h"
|
| #include "modules/webaudio/AudioNodeOutput.h"
|
| -#include "modules/webaudio/WaveTable.h"
|
| +#include "modules/webaudio/PeriodicWave.h"
|
| #include <algorithm>
|
| #include "wtf/MathExtras.h"
|
|
|
| @@ -43,10 +43,10 @@ namespace WebCore {
|
|
|
| using namespace VectorMath;
|
|
|
| -WaveTable* OscillatorNode::s_waveTableSine = 0;
|
| -WaveTable* OscillatorNode::s_waveTableSquare = 0;
|
| -WaveTable* OscillatorNode::s_waveTableSawtooth = 0;
|
| -WaveTable* OscillatorNode::s_waveTableTriangle = 0;
|
| +PeriodicWave* OscillatorNode::s_periodicWaveSine = 0;
|
| +PeriodicWave* OscillatorNode::s_periodicWaveSquare = 0;
|
| +PeriodicWave* OscillatorNode::s_periodicWaveSawtooth = 0;
|
| +PeriodicWave* OscillatorNode::s_periodicWaveTriangle = 0;
|
|
|
| PassRefPtr<OscillatorNode> OscillatorNode::create(AudioContext* context, float sampleRate)
|
| {
|
| @@ -118,38 +118,38 @@ void OscillatorNode::setType(const String& type)
|
|
|
| bool OscillatorNode::setType(unsigned type)
|
| {
|
| - WaveTable* waveTable = 0;
|
| + PeriodicWave* periodicWave = 0;
|
| float sampleRate = this->sampleRate();
|
|
|
| switch (type) {
|
| case SINE:
|
| - if (!s_waveTableSine)
|
| - s_waveTableSine = WaveTable::createSine(sampleRate).leakRef();
|
| - waveTable = s_waveTableSine;
|
| + if (!s_periodicWaveSine)
|
| + s_periodicWaveSine = PeriodicWave::createSine(sampleRate).leakRef();
|
| + periodicWave = s_periodicWaveSine;
|
| break;
|
| case SQUARE:
|
| - if (!s_waveTableSquare)
|
| - s_waveTableSquare = WaveTable::createSquare(sampleRate).leakRef();
|
| - waveTable = s_waveTableSquare;
|
| + if (!s_periodicWaveSquare)
|
| + s_periodicWaveSquare = PeriodicWave::createSquare(sampleRate).leakRef();
|
| + periodicWave = s_periodicWaveSquare;
|
| break;
|
| case SAWTOOTH:
|
| - if (!s_waveTableSawtooth)
|
| - s_waveTableSawtooth = WaveTable::createSawtooth(sampleRate).leakRef();
|
| - waveTable = s_waveTableSawtooth;
|
| + if (!s_periodicWaveSawtooth)
|
| + s_periodicWaveSawtooth = PeriodicWave::createSawtooth(sampleRate).leakRef();
|
| + periodicWave = s_periodicWaveSawtooth;
|
| break;
|
| case TRIANGLE:
|
| - if (!s_waveTableTriangle)
|
| - s_waveTableTriangle = WaveTable::createTriangle(sampleRate).leakRef();
|
| - waveTable = s_waveTableTriangle;
|
| + if (!s_periodicWaveTriangle)
|
| + s_periodicWaveTriangle = PeriodicWave::createTriangle(sampleRate).leakRef();
|
| + periodicWave = s_periodicWaveTriangle;
|
| break;
|
| case CUSTOM:
|
| default:
|
| - // Return error for invalid types, including CUSTOM since setWaveTable() method must be
|
| + // Return error for invalid types, including CUSTOM since setPeriodicWave() method must be
|
| // called explicitly.
|
| return false;
|
| }
|
|
|
| - setWaveTable(waveTable);
|
| + setPeriodicWave(periodicWave);
|
| m_type = type;
|
| return true;
|
| }
|
| @@ -171,7 +171,7 @@ bool OscillatorNode::calculateSampleAccuratePhaseIncrements(size_t framesToProce
|
| bool hasFrequencyChanges = false;
|
| float* phaseIncrements = m_phaseIncrements.data();
|
|
|
| - float finalScale = m_waveTable->rateScale();
|
| + float finalScale = m_periodicWave->rateScale();
|
|
|
| if (m_frequency->hasSampleAccurateValues()) {
|
| hasSampleAccurateValues = true;
|
| @@ -241,8 +241,8 @@ void OscillatorNode::process(size_t framesToProcess)
|
| return;
|
| }
|
|
|
| - // We must access m_waveTable only inside the lock.
|
| - if (!m_waveTable.get()) {
|
| + // We must access m_periodicWave only inside the lock.
|
| + if (!m_periodicWave.get()) {
|
| outputBus->zero();
|
| return;
|
| }
|
| @@ -257,8 +257,8 @@ void OscillatorNode::process(size_t framesToProcess)
|
| return;
|
| }
|
|
|
| - unsigned waveTableSize = m_waveTable->waveTableSize();
|
| - double invWaveTableSize = 1.0 / waveTableSize;
|
| + unsigned periodicWaveSize = m_periodicWave->periodicWaveSize();
|
| + double invPeriodicWaveSize = 1.0 / periodicWaveSize;
|
|
|
| float* destP = outputBus->channel(0)->mutableData();
|
|
|
| @@ -267,7 +267,7 @@ void OscillatorNode::process(size_t framesToProcess)
|
| // We keep virtualReadIndex double-precision since we're accumulating values.
|
| double virtualReadIndex = m_virtualReadIndex;
|
|
|
| - float rateScale = m_waveTable->rateScale();
|
| + float rateScale = m_periodicWave->rateScale();
|
| float invRateScale = 1 / rateScale;
|
| bool hasSampleAccurateValues = calculateSampleAccuratePhaseIncrements(framesToProcess);
|
|
|
| @@ -281,13 +281,13 @@ void OscillatorNode::process(size_t framesToProcess)
|
| float detune = m_detune->smoothedValue();
|
| float detuneScale = powf(2, detune / 1200);
|
| frequency *= detuneScale;
|
| - m_waveTable->waveDataForFundamentalFrequency(frequency, lowerWaveData, higherWaveData, tableInterpolationFactor);
|
| + m_periodicWave->waveDataForFundamentalFrequency(frequency, lowerWaveData, higherWaveData, tableInterpolationFactor);
|
| }
|
|
|
| float incr = frequency * rateScale;
|
| float* phaseIncrements = m_phaseIncrements.data();
|
|
|
| - unsigned readIndexMask = waveTableSize - 1;
|
| + unsigned readIndexMask = periodicWaveSize - 1;
|
|
|
| // Start rendering at the correct offset.
|
| destP += quantumFrameOffset;
|
| @@ -305,7 +305,7 @@ void OscillatorNode::process(size_t framesToProcess)
|
| incr = *phaseIncrements++;
|
|
|
| frequency = invRateScale * incr;
|
| - m_waveTable->waveDataForFundamentalFrequency(frequency, lowerWaveData, higherWaveData, tableInterpolationFactor);
|
| + m_periodicWave->waveDataForFundamentalFrequency(frequency, lowerWaveData, higherWaveData, tableInterpolationFactor);
|
| }
|
|
|
| float sample1Lower = lowerWaveData[readIndex];
|
| @@ -323,9 +323,9 @@ void OscillatorNode::process(size_t framesToProcess)
|
|
|
| *destP++ = sample;
|
|
|
| - // Increment virtual read index and wrap virtualReadIndex into the range 0 -> waveTableSize.
|
| + // Increment virtual read index and wrap virtualReadIndex into the range 0 -> periodicWaveSize.
|
| virtualReadIndex += incr;
|
| - virtualReadIndex -= floor(virtualReadIndex * invWaveTableSize) * waveTableSize;
|
| + virtualReadIndex -= floor(virtualReadIndex * invPeriodicWaveSize) * periodicWaveSize;
|
| }
|
|
|
| m_virtualReadIndex = virtualReadIndex;
|
| @@ -338,19 +338,19 @@ void OscillatorNode::reset()
|
| m_virtualReadIndex = 0;
|
| }
|
|
|
| -void OscillatorNode::setWaveTable(WaveTable* waveTable)
|
| +void OscillatorNode::setPeriodicWave(PeriodicWave* periodicWave)
|
| {
|
| ASSERT(isMainThread());
|
|
|
| // This synchronizes with process().
|
| MutexLocker processLocker(m_processLock);
|
| - m_waveTable = waveTable;
|
| + m_periodicWave = periodicWave;
|
| m_type = CUSTOM;
|
| }
|
|
|
| bool OscillatorNode::propagatesSilence() const
|
| {
|
| - return !isPlayingOrScheduled() || hasFinished() || !m_waveTable.get();
|
| + return !isPlayingOrScheduled() || hasFinished() || !m_periodicWave.get();
|
| }
|
|
|
| } // namespace WebCore
|
|
|