| Index: third_party/WebKit/Source/modules/webaudio/PannerNode.cpp
|
| diff --git a/third_party/WebKit/Source/modules/webaudio/PannerNode.cpp b/third_party/WebKit/Source/modules/webaudio/PannerNode.cpp
|
| index 7bdf21ea79c89db3d6b84bc98ebe8c3f4adec87d..ad21f7a0e81952fb79e562246e2ed20cc169aa67 100644
|
| --- a/third_party/WebKit/Source/modules/webaudio/PannerNode.cpp
|
| +++ b/third_party/WebKit/Source/modules/webaudio/PannerNode.cpp
|
| @@ -49,15 +49,12 @@ PannerHandler::PannerHandler(AudioNode& node, float sampleRate)
|
| , m_distanceModel(DistanceEffect::ModelInverse)
|
| , m_position(0, 0, 0)
|
| , m_orientation(1, 0, 0)
|
| - , m_velocity(0, 0, 0)
|
| , m_isAzimuthElevationDirty(true)
|
| , m_isDistanceConeGainDirty(true)
|
| - , m_isDopplerRateDirty(true)
|
| , m_lastGain(-1.0)
|
| , m_cachedAzimuth(0)
|
| , m_cachedElevation(0)
|
| , m_cachedDistanceConeGain(1.0f)
|
| - , m_cachedDopplerRate(1)
|
| {
|
| // Load the HRTF database asynchronously so we don't block the Javascript thread while creating the HRTF database.
|
| // The HRTF panner will return zeroes until the database is loaded.
|
| @@ -328,7 +325,7 @@ void PannerHandler::setPosition(float x, float y, float z)
|
| // This synchronizes with process().
|
| MutexLocker processLocker(m_processLock);
|
| m_position = position;
|
| - markPannerAsDirty(PannerHandler::AzimuthElevationDirty | PannerHandler::DistanceConeGainDirty | PannerHandler::DopplerRateDirty);
|
| + markPannerAsDirty(PannerHandler::AzimuthElevationDirty | PannerHandler::DistanceConeGainDirty);
|
| }
|
|
|
| void PannerHandler::setOrientation(float x, float y, float z)
|
| @@ -344,19 +341,6 @@ void PannerHandler::setOrientation(float x, float y, float z)
|
| markPannerAsDirty(PannerHandler::DistanceConeGainDirty);
|
| }
|
|
|
| -void PannerHandler::setVelocity(float x, float y, float z)
|
| -{
|
| - FloatPoint3D velocity = FloatPoint3D(x, y, z);
|
| -
|
| - if (m_velocity == velocity)
|
| - return;
|
| -
|
| - // This synchronizes with process().
|
| - MutexLocker processLocker(m_processLock);
|
| - m_velocity = velocity;
|
| - markPannerAsDirty(PannerHandler::DopplerRateDirty);
|
| -}
|
| -
|
| void PannerHandler::calculateAzimuthElevation(double* outAzimuth, double* outElevation)
|
| {
|
| double azimuth = 0.0;
|
| @@ -412,58 +396,6 @@ void PannerHandler::calculateAzimuthElevation(double* outAzimuth, double* outEle
|
| *outElevation = elevation;
|
| }
|
|
|
| -double PannerHandler::calculateDopplerRate()
|
| -{
|
| - double dopplerShift = 1.0;
|
| - double dopplerFactor = listener()->dopplerFactor();
|
| -
|
| - if (dopplerFactor > 0.0) {
|
| - double speedOfSound = listener()->speedOfSound();
|
| -
|
| - const FloatPoint3D& sourceVelocity = m_velocity;
|
| - const FloatPoint3D& listenerVelocity = listener()->velocity();
|
| -
|
| - // Don't bother if both source and listener have no velocity
|
| - bool sourceHasVelocity = !sourceVelocity.isZero();
|
| - bool listenerHasVelocity = !listenerVelocity.isZero();
|
| -
|
| - if (sourceHasVelocity || listenerHasVelocity) {
|
| - // Calculate the source to listener vector
|
| - FloatPoint3D listenerPosition = listener()->position();
|
| - FloatPoint3D sourceToListener = m_position - listenerPosition;
|
| -
|
| - double sourceListenerMagnitude = sourceToListener.length();
|
| -
|
| - if (!sourceListenerMagnitude) {
|
| - // Source and listener are at the same position. Skip the computation of the doppler
|
| - // shift, and just return the cached value.
|
| - dopplerShift = m_cachedDopplerRate;
|
| - } else {
|
| - double listenerProjection = sourceToListener.dot(listenerVelocity) / sourceListenerMagnitude;
|
| - double sourceProjection = sourceToListener.dot(sourceVelocity) / sourceListenerMagnitude;
|
| -
|
| - listenerProjection = -listenerProjection;
|
| - sourceProjection = -sourceProjection;
|
| -
|
| - double scaledSpeedOfSound = speedOfSound / dopplerFactor;
|
| - listenerProjection = std::min(listenerProjection, scaledSpeedOfSound);
|
| - sourceProjection = std::min(sourceProjection, scaledSpeedOfSound);
|
| -
|
| - dopplerShift = ((speedOfSound - dopplerFactor * listenerProjection) / (speedOfSound - dopplerFactor * sourceProjection));
|
| - fixNANs(dopplerShift); // avoid illegal values
|
| -
|
| - // Limit the pitch shifting to 4 octaves up and 3 octaves down.
|
| - if (dopplerShift > 16.0)
|
| - dopplerShift = 16.0;
|
| - else if (dopplerShift < 0.125)
|
| - dopplerShift = 0.125;
|
| - }
|
| - }
|
| - }
|
| -
|
| - return dopplerShift;
|
| -}
|
| -
|
| float PannerHandler::calculateDistanceConeGain()
|
| {
|
| FloatPoint3D listenerPosition = listener()->position();
|
| @@ -488,18 +420,6 @@ void PannerHandler::azimuthElevation(double* outAzimuth, double* outElevation)
|
| *outElevation = m_cachedElevation;
|
| }
|
|
|
| -double PannerHandler::dopplerRate()
|
| -{
|
| - ASSERT(context()->isAudioThread());
|
| -
|
| - if (isDopplerRateDirty()) {
|
| - m_cachedDopplerRate = calculateDopplerRate();
|
| - m_isDopplerRateDirty = false;
|
| - }
|
| -
|
| - return m_cachedDopplerRate;
|
| -}
|
| -
|
| float PannerHandler::distanceConeGain()
|
| {
|
| ASSERT(context()->isAudioThread());
|
| @@ -519,9 +439,6 @@ void PannerHandler::markPannerAsDirty(unsigned dirty)
|
|
|
| if (dirty & PannerHandler::DistanceConeGainDirty)
|
| m_isDistanceConeGainDirty = true;
|
| -
|
| - if (dirty & PannerHandler::DopplerRateDirty)
|
| - m_isDopplerRateDirty = true;
|
| }
|
|
|
| void PannerHandler::setChannelCount(unsigned long channelCount, ExceptionState& exceptionState)
|
| @@ -615,7 +532,8 @@ void PannerNode::setOrientation(float x, float y, float z)
|
|
|
| void PannerNode::setVelocity(float x, float y, float z)
|
| {
|
| - pannerHandler().setVelocity(x, y, z);
|
| + // The velocity is not used internally and cannot be read back by scripts,
|
| + // so it can be ignored entirely.
|
| }
|
|
|
| String PannerNode::distanceModel() const
|
| @@ -689,4 +607,3 @@ void PannerNode::setConeOuterGain(double gain)
|
| }
|
|
|
| } // namespace blink
|
| -
|
|
|