Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Unified Diff: Source/modules/webaudio/PannerNode.cpp

Issue 301733002: Make panner's doppler rate continuous as the source position approaches the listener position. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/webaudio/PannerNode.cpp
diff --git a/Source/modules/webaudio/PannerNode.cpp b/Source/modules/webaudio/PannerNode.cpp
index fc68098c736097510a1ebdd9c60b0867799f6bd5..0b283414284decc71a586054cd8468f488f9615b 100644
--- a/Source/modules/webaudio/PannerNode.cpp
+++ b/Source/modules/webaudio/PannerNode.cpp
@@ -386,9 +386,10 @@ void PannerNode::calculateAzimuthElevation(double* outAzimuth, double* outElevat
FloatPoint3D sourceListener = m_position - listenerPosition;
if (sourceListener.isZero()) {
KhNo 2014/05/28 13:57:20 How do you think if we remove line from 388 to 394
Raymond Toy 2014/05/28 17:19:16 I think sourceListener.normalize() will fail (retu
Raymond Toy 2014/05/28 18:25:26 Oh, wait. normalize() does nothing if the length
Raymond Toy 2014/05/29 18:22:13 This is ok. The special case is removed.
- // degenerate case if source and listener are at the same point
- *outAzimuth = 0.0;
- *outElevation = 0.0;
+ // Degenerate case if source and listener are at the same point. To preserve continuity,
Ken Russell (switch to Gerrit) 2014/05/27 23:24:43 Comparing against zero seems fragile. You're the e
Raymond Toy 2014/05/28 17:17:22 I think this is ok here. If it's not zero, sourceL
+ // don't change anything; just use the cached values.
+ *outAzimuth = m_cachedAzimuth;
+ *outElevation = m_cachedElevation;
return;
}
@@ -461,24 +462,30 @@ double PannerNode::calculateDopplerRate()
double sourceListenerMagnitude = sourceToListener.length();
- double listenerProjection = sourceToListener.dot(listenerVelocity) / sourceListenerMagnitude;
- double sourceProjection = sourceToListener.dot(sourceVelocity) / sourceListenerMagnitude;
+ if (!sourceListenerMagnitude) {
Ken Russell (switch to Gerrit) 2014/05/27 23:24:43 Same comment here.
Raymond Toy 2014/05/28 17:17:22 I believe this is ok here too. It's only a proble
+ // 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;
+ listenerProjection = -listenerProjection;
+ sourceProjection = -sourceProjection;
- double scaledSpeedOfSound = speedOfSound / dopplerFactor;
- listenerProjection = min(listenerProjection, scaledSpeedOfSound);
- sourceProjection = min(sourceProjection, scaledSpeedOfSound);
+ double scaledSpeedOfSound = speedOfSound / dopplerFactor;
+ listenerProjection = min(listenerProjection, scaledSpeedOfSound);
+ sourceProjection = min(sourceProjection, scaledSpeedOfSound);
- dopplerShift = ((speedOfSound - dopplerFactor * listenerProjection) / (speedOfSound - dopplerFactor * sourceProjection));
- fixNANs(dopplerShift); // avoid illegal values
+ 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;
+ // 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;
+ }
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698