[Webkit-unassigned] [Bug 44705] Add audio distance effect files

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Aug 30 14:12:24 PDT 2010


https://bugs.webkit.org/show_bug.cgi?id=44705


Kenneth Russell <kbr at google.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #65595|review?                     |review-
               Flag|                            |




--- Comment #3 from Kenneth Russell <kbr at google.com>  2010-08-30 14:12:24 PST ---
(From update of attachment 65595)
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

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


More information about the webkit-unassigned mailing list