Chromium Code Reviews| 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 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 74 // dies. | 74 // dies. |
| 75 class AudioParamHandler final : public ThreadSafeRefCounted<AudioParamHandler>, public AudioSummingJunction { | 75 class AudioParamHandler final : public ThreadSafeRefCounted<AudioParamHandler>, public AudioSummingJunction { |
| 76 public: | 76 public: |
| 77 AudioParamType getParamType() const { return m_paramType; } | 77 AudioParamType getParamType() const { return m_paramType; } |
| 78 // Return a nice name for the AudioParam. | 78 // Return a nice name for the AudioParam. |
| 79 String getParamName() const; | 79 String getParamName() const; |
| 80 | 80 |
| 81 static const double DefaultSmoothingConstant; | 81 static const double DefaultSmoothingConstant; |
| 82 static const double SnapThreshold; | 82 static const double SnapThreshold; |
| 83 | 83 |
| 84 static PassRefPtr<AudioParamHandler> create(AbstractAudioContext& context, A udioParamType paramType, double defaultValue) | 84 static PassRefPtr<AudioParamHandler> create( |
| 85 AbstractAudioContext& context, | |
| 86 AudioParamType paramType, | |
| 87 double defaultValue, | |
| 88 float min, | |
| 89 float max) | |
|
hongchan
2016/05/13 01:30:15
Even for internal variables - I suggest we should
Raymond Toy
2016/05/13 18:40:32
Done.
| |
| 85 { | 90 { |
| 86 return adoptRef(new AudioParamHandler(context, paramType, defaultValue)) ; | 91 return adoptRef(new AudioParamHandler(context, paramType, defaultValue, min, max)); |
|
hongchan
2016/05/13 01:30:15
Ditto.
Raymond Toy
2016/05/13 18:40:32
Done.
| |
| 87 } | 92 } |
| 88 | 93 |
| 89 // This should be used only in audio rendering thread. | 94 // This should be used only in audio rendering thread. |
| 90 AudioDestinationHandler& destinationHandler() const; | 95 AudioDestinationHandler& destinationHandler() const; |
| 91 | 96 |
| 92 // AudioSummingJunction | 97 // AudioSummingJunction |
| 93 void didUpdate() override { } | 98 void didUpdate() override { } |
| 94 | 99 |
| 95 AudioParamTimeline& timeline() { return m_timeline; } | 100 AudioParamTimeline& timeline() { return m_timeline; } |
| 96 | 101 |
| 97 // Intrinsic value. | 102 // Intrinsic value. |
| 98 float value(); | 103 float value(); |
| 99 void setValue(float); | 104 void setValue(float); |
| 100 | 105 |
| 101 // Final value for k-rate parameters, otherwise use calculateSampleAccurateV alues() for a-rate. | 106 // Final value for k-rate parameters, otherwise use calculateSampleAccurateV alues() for a-rate. |
| 102 // Must be called in the audio thread. | 107 // Must be called in the audio thread. |
| 103 float finalValue(); | 108 float finalValue(); |
| 104 | 109 |
| 105 float defaultValue() const { return static_cast<float>(m_defaultValue); } | 110 float defaultValue() const { return static_cast<float>(m_defaultValue); } |
| 111 float minValue() const { return m_minValue; } | |
| 112 float maxValue() const { return m_maxValue; } | |
| 106 | 113 |
| 107 // Value smoothing: | 114 // Value smoothing: |
| 108 | 115 |
| 109 // When a new value is set with setValue(), in our internal use of the param eter we don't immediately jump to it. | 116 // When a new value is set with setValue(), in our internal use of the param eter we don't immediately jump to it. |
| 110 // Instead we smoothly approach this value to avoid glitching. | 117 // Instead we smoothly approach this value to avoid glitching. |
| 111 float smoothedValue(); | 118 float smoothedValue(); |
| 112 | 119 |
| 113 // Smoothly exponentially approaches to (de-zippers) the desired value. | 120 // Smoothly exponentially approaches to (de-zippers) the desired value. |
| 114 // Returns true if smoothed value has already snapped exactly to value. | 121 // Returns true if smoothed value has already snapped exactly to value. |
| 115 bool smooth(); | 122 bool smooth(); |
| 116 | 123 |
| 117 void resetSmoothedValue() { m_smoothedValue = intrinsicValue(); } | 124 void resetSmoothedValue() { m_smoothedValue = intrinsicValue(); } |
| 118 | 125 |
| 119 bool hasSampleAccurateValues() { return m_timeline.hasValues() || numberOfRe nderingConnections(); } | 126 bool hasSampleAccurateValues() { return m_timeline.hasValues() || numberOfRe nderingConnections(); } |
| 120 | 127 |
| 121 // Calculates numberOfValues parameter values starting at the context's curr ent time. | 128 // Calculates numberOfValues parameter values starting at the context's curr ent time. |
| 122 // Must be called in the context's render thread. | 129 // Must be called in the context's render thread. |
| 123 void calculateSampleAccurateValues(float* values, unsigned numberOfValues); | 130 void calculateSampleAccurateValues(float* values, unsigned numberOfValues); |
| 124 | 131 |
| 125 // Connect an audio-rate signal to control this parameter. | 132 // Connect an audio-rate signal to control this parameter. |
| 126 void connect(AudioNodeOutput&); | 133 void connect(AudioNodeOutput&); |
| 127 void disconnect(AudioNodeOutput&); | 134 void disconnect(AudioNodeOutput&); |
| 128 | 135 |
| 129 float intrinsicValue() const { return noBarrierLoad(&m_intrinsicValue); } | 136 float intrinsicValue() const { return noBarrierLoad(&m_intrinsicValue); } |
| 130 private: | 137 private: |
| 131 AudioParamHandler(AbstractAudioContext&, AudioParamType, double defaultValue ); | 138 AudioParamHandler(AbstractAudioContext&, AudioParamType, double defaultValue , float min, float max); |
| 139 | |
| 140 void warnIfOutsideRange(float value, float minValue, float maxValue); | |
| 132 | 141 |
| 133 // sampleAccurate corresponds to a-rate (audio rate) vs. k-rate in the Web A udio specification. | 142 // sampleAccurate corresponds to a-rate (audio rate) vs. k-rate in the Web A udio specification. |
| 134 void calculateFinalValues(float* values, unsigned numberOfValues, bool sampl eAccurate); | 143 void calculateFinalValues(float* values, unsigned numberOfValues, bool sampl eAccurate); |
| 135 void calculateTimelineValues(float* values, unsigned numberOfValues); | 144 void calculateTimelineValues(float* values, unsigned numberOfValues); |
| 136 | 145 |
| 137 // The type of AudioParam, indicating what this AudioParam represents and wh at node it belongs | 146 // The type of AudioParam, indicating what this AudioParam represents and wh at node it belongs |
| 138 // to. Mostly for informational purposes and doesn't affect implementation. | 147 // to. Mostly for informational purposes and doesn't affect implementation. |
| 139 AudioParamType m_paramType; | 148 AudioParamType m_paramType; |
| 140 | 149 |
| 141 // Intrinsic value | 150 // Intrinsic value |
| 142 float m_intrinsicValue; | 151 float m_intrinsicValue; |
| 143 void setIntrinsicValue(float newValue) { noBarrierStore(&m_intrinsicValue, n ewValue); } | 152 void setIntrinsicValue(float newValue); |
| 144 | 153 |
| 145 float m_defaultValue; | 154 float m_defaultValue; |
| 146 | 155 |
| 156 // Nominal range for the value | |
| 157 float m_minValue; | |
| 158 float m_maxValue; | |
| 159 | |
| 147 // Smoothing (de-zippering) | 160 // Smoothing (de-zippering) |
| 148 float m_smoothedValue; | 161 float m_smoothedValue; |
| 149 | 162 |
| 150 AudioParamTimeline m_timeline; | 163 AudioParamTimeline m_timeline; |
| 151 | 164 |
| 152 // The destination node used to get necessary information like the smaple ra te and context time. | 165 // The destination node used to get necessary information like the smaple ra te and context time. |
| 153 RefPtr<AudioDestinationHandler> m_destinationHandler; | 166 RefPtr<AudioDestinationHandler> m_destinationHandler; |
| 154 }; | 167 }; |
| 155 | 168 |
| 156 // AudioParam class represents web-exposed AudioParam interface. | 169 // AudioParam class represents web-exposed AudioParam interface. |
| 157 class AudioParam final : public GarbageCollectedFinalized<AudioParam>, public Sc riptWrappable { | 170 class AudioParam final : public GarbageCollectedFinalized<AudioParam>, public Sc riptWrappable { |
| 158 DEFINE_WRAPPERTYPEINFO(); | 171 DEFINE_WRAPPERTYPEINFO(); |
| 159 public: | 172 public: |
| 160 static AudioParam* create(AbstractAudioContext&, AudioParamType, double defa ultValue); | 173 static AudioParam* create(AbstractAudioContext&, AudioParamType, double defa ultValue); |
| 174 static AudioParam* create(AbstractAudioContext&, AudioParamType, double defa ultValue, float min, float max); | |
|
hongchan
2016/05/13 01:30:15
Here as well.
Raymond Toy
2016/05/13 18:40:32
Done.
| |
| 175 | |
| 161 DECLARE_TRACE(); | 176 DECLARE_TRACE(); |
| 162 // |handler| always returns a valid object. | 177 // |handler| always returns a valid object. |
| 163 AudioParamHandler& handler() const { return *m_handler; } | 178 AudioParamHandler& handler() const { return *m_handler; } |
| 164 // |context| always returns a valid object. | 179 // |context| always returns a valid object. |
| 165 AbstractAudioContext* context() const { return m_context; } | 180 AbstractAudioContext* context() const { return m_context; } |
| 166 | 181 |
| 167 AudioParamType getParamType() const { return handler().getParamType(); } | 182 AudioParamType getParamType() const { return handler().getParamType(); } |
| 168 String getParamName() const; | 183 String getParamName() const; |
| 169 | 184 |
| 170 float value() const; | 185 float value() const; |
| 171 void setValue(float); | 186 void setValue(float); |
| 172 float defaultValue() const; | 187 float defaultValue() const; |
| 188 | |
| 189 float minValue() const; | |
| 190 float maxValue() const; | |
| 191 | |
| 173 AudioParam* setValueAtTime(float value, double time, ExceptionState&); | 192 AudioParam* setValueAtTime(float value, double time, ExceptionState&); |
| 174 AudioParam* linearRampToValueAtTime(float value, double time, ExceptionState &); | 193 AudioParam* linearRampToValueAtTime(float value, double time, ExceptionState &); |
| 175 AudioParam* exponentialRampToValueAtTime(float value, double time, Exception State&); | 194 AudioParam* exponentialRampToValueAtTime(float value, double time, Exception State&); |
| 176 AudioParam* setTargetAtTime(float target, double time, double timeConstant, ExceptionState&); | 195 AudioParam* setTargetAtTime(float target, double time, double timeConstant, ExceptionState&); |
| 177 AudioParam* setValueCurveAtTime(DOMFloat32Array* curve, double time, double duration, ExceptionState&); | 196 AudioParam* setValueCurveAtTime(DOMFloat32Array* curve, double time, double duration, ExceptionState&); |
| 178 AudioParam* cancelScheduledValues(double startTime, ExceptionState&); | 197 AudioParam* cancelScheduledValues(double startTime, ExceptionState&); |
| 179 | 198 |
| 180 private: | 199 private: |
| 181 AudioParam(AbstractAudioContext&, AudioParamType, double defaultValue); | 200 AudioParam(AbstractAudioContext&, AudioParamType, double defaultValue, float min, float max); |
|
hongchan
2016/05/13 01:30:15
Ditto.
Raymond Toy
2016/05/13 18:40:32
Done.
| |
| 201 | |
| 202 void warnIfOutsideRange(float value, float minValue, float maxValue); | |
| 182 | 203 |
| 183 RefPtr<AudioParamHandler> m_handler; | 204 RefPtr<AudioParamHandler> m_handler; |
| 184 Member<AbstractAudioContext> m_context; | 205 Member<AbstractAudioContext> m_context; |
| 185 }; | 206 }; |
| 186 | 207 |
| 187 } // namespace blink | 208 } // namespace blink |
| 188 | 209 |
| 189 #endif // AudioParam_h | 210 #endif // AudioParam_h |
| OLD | NEW |