| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010, Google Inc. All rights reserved. | 2 * Copyright (C) 2010, Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 #include "modules/webaudio/PannerNode.h" | 29 #include "modules/webaudio/PannerNode.h" |
| 30 | 30 |
| 31 #include "core/dom/ExecutionContext.h" | 31 #include "core/dom/ExecutionContext.h" |
| 32 #include "platform/audio/HRTFPanner.h" | 32 #include "platform/audio/HRTFPanner.h" |
| 33 #include "modules/webaudio/AudioBufferSourceNode.h" | 33 #include "modules/webaudio/AudioBufferSourceNode.h" |
| 34 #include "modules/webaudio/AudioContext.h" | 34 #include "modules/webaudio/AudioContext.h" |
| 35 #include "modules/webaudio/AudioNodeInput.h" | 35 #include "modules/webaudio/AudioNodeInput.h" |
| 36 #include "modules/webaudio/AudioNodeOutput.h" | 36 #include "modules/webaudio/AudioNodeOutput.h" |
| 37 #include "wtf/MathExtras.h" | 37 #include "wtf/MathExtras.h" |
| 38 | 38 |
| 39 using namespace std; | |
| 40 | |
| 41 namespace WebCore { | 39 namespace WebCore { |
| 42 | 40 |
| 43 static void fixNANs(double &x) | 41 static void fixNANs(double &x) |
| 44 { | 42 { |
| 45 if (std::isnan(x) || std::isinf(x)) | 43 if (std::isnan(x) || std::isinf(x)) |
| 46 x = 0.0; | 44 x = 0.0; |
| 47 } | 45 } |
| 48 | 46 |
| 49 PannerNode::PannerNode(AudioContext* context, float sampleRate) | 47 PannerNode::PannerNode(AudioContext* context, float sampleRate) |
| 50 : AudioNode(context, sampleRate) | 48 : AudioNode(context, sampleRate) |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 // shift, and just return the cached value. | 458 // shift, and just return the cached value. |
| 461 dopplerShift = m_cachedDopplerRate; | 459 dopplerShift = m_cachedDopplerRate; |
| 462 } else { | 460 } else { |
| 463 double listenerProjection = sourceToListener.dot(listenerVelocit
y) / sourceListenerMagnitude; | 461 double listenerProjection = sourceToListener.dot(listenerVelocit
y) / sourceListenerMagnitude; |
| 464 double sourceProjection = sourceToListener.dot(sourceVelocity) /
sourceListenerMagnitude; | 462 double sourceProjection = sourceToListener.dot(sourceVelocity) /
sourceListenerMagnitude; |
| 465 | 463 |
| 466 listenerProjection = -listenerProjection; | 464 listenerProjection = -listenerProjection; |
| 467 sourceProjection = -sourceProjection; | 465 sourceProjection = -sourceProjection; |
| 468 | 466 |
| 469 double scaledSpeedOfSound = speedOfSound / dopplerFactor; | 467 double scaledSpeedOfSound = speedOfSound / dopplerFactor; |
| 470 listenerProjection = min(listenerProjection, scaledSpeedOfSound)
; | 468 listenerProjection = std::min(listenerProjection, scaledSpeedOfS
ound); |
| 471 sourceProjection = min(sourceProjection, scaledSpeedOfSound); | 469 sourceProjection = std::min(sourceProjection, scaledSpeedOfSound
); |
| 472 | 470 |
| 473 dopplerShift = ((speedOfSound - dopplerFactor * listenerProjecti
on) / (speedOfSound - dopplerFactor * sourceProjection)); | 471 dopplerShift = ((speedOfSound - dopplerFactor * listenerProjecti
on) / (speedOfSound - dopplerFactor * sourceProjection)); |
| 474 fixNANs(dopplerShift); // avoid illegal values | 472 fixNANs(dopplerShift); // avoid illegal values |
| 475 | 473 |
| 476 // Limit the pitch shifting to 4 octaves up and 3 octaves down. | 474 // Limit the pitch shifting to 4 octaves up and 3 octaves down. |
| 477 if (dopplerShift > 16.0) | 475 if (dopplerShift > 16.0) |
| 478 dopplerShift = 16.0; | 476 dopplerShift = 16.0; |
| 479 else if (dopplerShift < 0.125) | 477 else if (dopplerShift < 0.125) |
| 480 dopplerShift = 0.125; | 478 dopplerShift = 0.125; |
| 481 } | 479 } |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 notifyAudioSourcesConnectedToNode(connectedNode, visitedNode
s); // recurse | 571 notifyAudioSourcesConnectedToNode(connectedNode, visitedNode
s); // recurse |
| 574 } | 572 } |
| 575 } | 573 } |
| 576 } | 574 } |
| 577 } | 575 } |
| 578 } | 576 } |
| 579 | 577 |
| 580 } // namespace WebCore | 578 } // namespace WebCore |
| 581 | 579 |
| 582 #endif // ENABLE(WEB_AUDIO) | 580 #endif // ENABLE(WEB_AUDIO) |
| OLD | NEW |