RESOLVED FIXED Bug 44705
Add audio distance effect files
https://bugs.webkit.org/show_bug.cgi?id=44705
Summary Add audio distance effect files
Chris Rogers
Reported 2010-08-26 12:04:41 PDT
Add audio distance effect files
Attachments
Patch (7.57 KB, patch)
2010-08-26 12:11 PDT, Chris Rogers
no flags
Patch (7.53 KB, patch)
2010-08-30 15:31 PDT, Chris Rogers
no flags
Chris Rogers
Comment 1 2010-08-26 12:11:34 PDT
Chris Rogers
Comment 2 2010-08-26 12:38:39 PDT
For use with the web audio API, these files implement the distance rolloff models as defined in OpenAL.
Kenneth Russell
Comment 3 2010-08-30 14:12:24 PDT
Comment on attachment 65595 [details] Patch Generally looks good, but a few minor issues. > Index: WebCore/platform/audio/Distance.cpp > =================================================================== > --- WebCore/platform/audio/Distance.cpp (revision 0) > +++ WebCore/platform/audio/Distance.cpp (revision 0) > @@ -0,0 +1,90 @@ > +/* > + * Copyright (C) 2010 Google Inc. All rights reserved. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of > + * its contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY > + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED > + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE > + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY > + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES > + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; > + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#include "config.h" > + > +#if ENABLE(WEB_AUDIO) > + > +#include "Distance.h" > + > +#include <math.h> > + > +namespace WebCore { > + > +DistanceEffect::DistanceEffect() > + : m_model(ModelInverse) > + , m_isClamped(true) > + , m_refDistance(1.0) > + , m_maxDistance(10000.0) > + , m_rolloffFactor(1.0) > +{ > +} > + > +double DistanceEffect::gain(double distance) > +{ > + // don't go beyond maximum distance > + distance = distance < m_maxDistance ? distance : m_maxDistance; Write this as std::min(distance, m_maxDistance). Requires #include <algorithm>. > + // if clamped, don't get closer than reference distance > + if (m_isClamped) > + distance = distance > m_refDistance ? distance : m_refDistance; Similarly, std::max(distance, m_refDistance). > + switch (m_model) { > + case ModelLinear: > + return linearGain(distance); > + break; > + case ModelInverse: > + return inverseGain(distance); > + break; > + case ModelExponential: > + return exponentialGain(distance); > + break; > + > + default: > + return 0.0; > + } > +} > + > +double DistanceEffect::linearGain(double distance) > +{ > + return (1.0 - m_rolloffFactor * (distance - m_refDistance)) / (m_maxDistance - m_refDistance); > +} > + > +double DistanceEffect::inverseGain(double distance) > +{ > + return m_refDistance / (m_refDistance + m_rolloffFactor * (distance - m_refDistance)); > +} > + > +double DistanceEffect::exponentialGain(double distance) > +{ > + return pow(distance / m_refDistance, -m_rolloffFactor); > +} > + > +} // namespace WebCore > + > +#endif // ENABLE(WEB_AUDIO) > Index: WebCore/platform/audio/Distance.h > =================================================================== > --- WebCore/platform/audio/Distance.h (revision 0) > +++ WebCore/platform/audio/Distance.h (revision 0) > @@ -0,0 +1,80 @@ > +/* > + * Copyright (C) 2010 Google Inc. All rights reserved. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of > + * its contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY > + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED > + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE > + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY > + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES > + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; > + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#ifndef Distance_h > +#define Distance_h > + > +namespace WebCore { > + > +// Distance models are defined according to the OpenAL specification > + > +class DistanceEffect { > +public: > + enum { > + ModelLinear = 0, > + ModelInverse = 1, > + ModelExponential = 2 > + }; This enum should have a name, for example ModelType. > + DistanceEffect(); > + > + // Returns scalar gain for the given distance the current distance model is used > + double gain(double distance); > + > + int model() { return m_model; } Should return enum name (e.g. ModelType). > + void setModel(int model, bool clamped) > + { > + m_model = model; > + m_isClamped = clamped; > + } Should take e.g. ModelType as first argument. > + // Distance params > + void setRefDistance(double refDistance) { m_refDistance = refDistance; } > + void setMaxDistance(double maxDistance) { m_maxDistance = maxDistance; } > + void setRolloffFactor(double rolloffFactor) { m_rolloffFactor = rolloffFactor; } > + > + double refDistance() const { return m_refDistance; } > + double maxDistance() const { return m_maxDistance; } > + double rolloffFactor() const { return m_rolloffFactor; } > + > +protected: > + double linearGain(double distance); > + double inverseGain(double distance); > + double exponentialGain(double distance); > + > + int m_model; Should use enum type. > + bool m_isClamped; > + double m_refDistance; > + double m_maxDistance; > + double m_rolloffFactor; > +}; > + > +} // namespace WebCore > + > +#endif // Distance_h
Chris Rogers
Comment 4 2010-08-30 15:31:27 PDT
Chris Rogers
Comment 5 2010-09-01 12:10:52 PDT
Addressed all comments with last patch.
Kenneth Russell
Comment 6 2010-09-02 16:13:03 PDT
Comment on attachment 65970 [details] Patch Looks good; r=me.
WebKit Commit Bot
Comment 7 2010-09-02 18:01:10 PDT
Comment on attachment 65970 [details] Patch Rejecting patch 65970 from commit-queue. crogers@google.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitpy/common/config/committers.py. - If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags. - If you have committer rights please correct the error in WebKitTools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed). The commit-queue restarts itself every 2 hours. After restart the commit-queue will correctly respect your committer rights.
Chris Rogers
Comment 8 2010-09-03 11:33:15 PDT
Comment on attachment 65970 [details] Patch Clearing flags on attachment: 65970 Committed r66745: <http://trac.webkit.org/changeset/66745>
Chris Rogers
Comment 9 2010-09-03 11:33:19 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.