18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 2f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * Copyright (C) 2010 Google Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "config.h" 270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 28f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if ENABLE(WEB_AUDIO) 290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 30f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "AudioParam.h" 310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 32f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include <wtf/MathExtras.h> 33967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 34f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochnamespace WebCore { 35f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 36f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochconst double AudioParam::DefaultSmoothingConstant = 0.05; 37f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochconst double AudioParam::SnapThreshold = 0.001; 380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 39f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid AudioParam::setValue(float value) 400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 41f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Check against JavaScript giving us bogus floating-point values. 42f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Don't ASSERT, since this can happen if somebody writes bad JS. 43f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!isnan(value) && !isinf(value)) 44f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_value = value; 450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 47f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool AudioParam::smooth() 480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 49f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (m_smoothedValue == m_value) { 50f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Smoothed value has already approached and snapped to value. 51f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return true; 52f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 53f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 54f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Exponential approach 55f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_smoothedValue += (m_value - m_smoothedValue) * m_smoothingConstant; 56f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 57f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // If we get close enough then snap to actual value. 58f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (fabs(m_smoothedValue - m_value) < SnapThreshold) // FIXME: the threshold needs to be adjustable depending on range - but this is OK general purpose value. 59f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_smoothedValue = m_value; 60f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 63f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 64f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} // namespace WebCore 65f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 66f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif // ENABLE(WEB_AUDIO) 67