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 25 matching lines...) Expand all Loading... |
36 #include "modules/webaudio/BaseAudioContext.h" | 36 #include "modules/webaudio/BaseAudioContext.h" |
37 #include "wtf/PassRefPtr.h" | 37 #include "wtf/PassRefPtr.h" |
38 #include "wtf/ThreadSafeRefCounted.h" | 38 #include "wtf/ThreadSafeRefCounted.h" |
39 #include "wtf/text/WTFString.h" | 39 #include "wtf/text/WTFString.h" |
40 #include <sys/types.h> | 40 #include <sys/types.h> |
41 | 41 |
42 namespace blink { | 42 namespace blink { |
43 | 43 |
44 class AudioNodeOutput; | 44 class AudioNodeOutput; |
45 | 45 |
46 // Each AudioParam gets an identifier here. This is mostly for instrospection i
f warnings or | 46 // Each AudioParam gets an identifier here. This is mostly for instrospection |
47 // other messages need to be printed. It's useful to know what the AudioParam re
presents. The | 47 // if warnings or other messages need to be printed. It's useful to know what |
48 // name should include the node type and the name of the AudioParam. | 48 // the AudioParam represents. The name should include the node type and the |
| 49 // name of the AudioParam. |
49 enum AudioParamType { | 50 enum AudioParamType { |
50 ParamTypeAudioBufferSourcePlaybackRate, | 51 ParamTypeAudioBufferSourcePlaybackRate, |
51 ParamTypeAudioBufferSourceDetune, | 52 ParamTypeAudioBufferSourceDetune, |
52 ParamTypeBiquadFilterFrequency, | 53 ParamTypeBiquadFilterFrequency, |
53 ParamTypeBiquadFilterQ, | 54 ParamTypeBiquadFilterQ, |
54 ParamTypeBiquadFilterQLowpass, | 55 ParamTypeBiquadFilterQLowpass, |
55 ParamTypeBiquadFilterQHighpass, | 56 ParamTypeBiquadFilterQHighpass, |
56 ParamTypeBiquadFilterGain, | 57 ParamTypeBiquadFilterGain, |
57 ParamTypeBiquadFilterDetune, | 58 ParamTypeBiquadFilterDetune, |
58 ParamTypeDelayDelayTime, | 59 ParamTypeDelayDelayTime, |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 | 115 |
115 // AudioSummingJunction | 116 // AudioSummingJunction |
116 void didUpdate() override {} | 117 void didUpdate() override {} |
117 | 118 |
118 AudioParamTimeline& timeline() { return m_timeline; } | 119 AudioParamTimeline& timeline() { return m_timeline; } |
119 | 120 |
120 // Intrinsic value. | 121 // Intrinsic value. |
121 float value(); | 122 float value(); |
122 void setValue(float); | 123 void setValue(float); |
123 | 124 |
124 // Final value for k-rate parameters, otherwise use calculateSampleAccurateVal
ues() for a-rate. | 125 // Final value for k-rate parameters, otherwise use |
| 126 // calculateSampleAccurateValues() for a-rate. |
125 // Must be called in the audio thread. | 127 // Must be called in the audio thread. |
126 float finalValue(); | 128 float finalValue(); |
127 | 129 |
128 float defaultValue() const { return static_cast<float>(m_defaultValue); } | 130 float defaultValue() const { return static_cast<float>(m_defaultValue); } |
129 float minValue() const { return m_minValue; } | 131 float minValue() const { return m_minValue; } |
130 float maxValue() const { return m_maxValue; } | 132 float maxValue() const { return m_maxValue; } |
131 | 133 |
132 // Value smoothing: | 134 // Value smoothing: |
133 | 135 |
134 // When a new value is set with setValue(), in our internal use of the paramet
er we don't immediately jump to it. | 136 // When a new value is set with setValue(), in our internal use of the |
135 // Instead we smoothly approach this value to avoid glitching. | 137 // parameter we don't immediately jump to it. Instead we smoothly approach |
| 138 // this value to avoid glitching. |
136 float smoothedValue(); | 139 float smoothedValue(); |
137 | 140 |
138 // Smoothly exponentially approaches to (de-zippers) the desired value. | 141 // Smoothly exponentially approaches to (de-zippers) the desired value. |
139 // Returns true if smoothed value has already snapped exactly to value. | 142 // Returns true if smoothed value has already snapped exactly to value. |
140 bool smooth(); | 143 bool smooth(); |
141 | 144 |
142 void resetSmoothedValue() { m_timeline.setSmoothedValue(intrinsicValue()); } | 145 void resetSmoothedValue() { m_timeline.setSmoothedValue(intrinsicValue()); } |
143 | 146 |
144 bool hasSampleAccurateValues() { | 147 bool hasSampleAccurateValues() { |
145 return m_timeline.hasValues() || numberOfRenderingConnections(); | 148 return m_timeline.hasValues() || numberOfRenderingConnections(); |
146 } | 149 } |
147 | 150 |
148 // Calculates numberOfValues parameter values starting at the context's curren
t time. | 151 // Calculates numberOfValues parameter values starting at the context's |
| 152 // current time. |
149 // Must be called in the context's render thread. | 153 // Must be called in the context's render thread. |
150 void calculateSampleAccurateValues(float* values, unsigned numberOfValues); | 154 void calculateSampleAccurateValues(float* values, unsigned numberOfValues); |
151 | 155 |
152 // Connect an audio-rate signal to control this parameter. | 156 // Connect an audio-rate signal to control this parameter. |
153 void connect(AudioNodeOutput&); | 157 void connect(AudioNodeOutput&); |
154 void disconnect(AudioNodeOutput&); | 158 void disconnect(AudioNodeOutput&); |
155 | 159 |
156 float intrinsicValue() const { return noBarrierLoad(&m_intrinsicValue); } | 160 float intrinsicValue() const { return noBarrierLoad(&m_intrinsicValue); } |
157 | 161 |
158 // Update any histograms with the given value. | 162 // Update any histograms with the given value. |
159 void updateHistograms(float newValue); | 163 void updateHistograms(float newValue); |
160 | 164 |
161 private: | 165 private: |
162 AudioParamHandler(BaseAudioContext&, | 166 AudioParamHandler(BaseAudioContext&, |
163 AudioParamType, | 167 AudioParamType, |
164 double defaultValue, | 168 double defaultValue, |
165 float min, | 169 float min, |
166 float max); | 170 float max); |
167 | 171 |
168 void warnIfOutsideRange(float value, float minValue, float maxValue); | 172 void warnIfOutsideRange(float value, float minValue, float maxValue); |
169 | 173 |
170 // sampleAccurate corresponds to a-rate (audio rate) vs. k-rate in the Web Aud
io specification. | 174 // sampleAccurate corresponds to a-rate (audio rate) vs. k-rate in the Web |
| 175 // Audio specification. |
171 void calculateFinalValues(float* values, | 176 void calculateFinalValues(float* values, |
172 unsigned numberOfValues, | 177 unsigned numberOfValues, |
173 bool sampleAccurate); | 178 bool sampleAccurate); |
174 void calculateTimelineValues(float* values, unsigned numberOfValues); | 179 void calculateTimelineValues(float* values, unsigned numberOfValues); |
175 | 180 |
176 int computeQHistogramValue(float) const; | 181 int computeQHistogramValue(float) const; |
177 | 182 |
178 // The type of AudioParam, indicating what this AudioParam represents and what
node it belongs | 183 // The type of AudioParam, indicating what this AudioParam represents and what |
179 // to. Mostly for informational purposes and doesn't affect implementation. | 184 // node it belongs to. Mostly for informational purposes and doesn't affect |
| 185 // implementation. |
180 AudioParamType m_paramType; | 186 AudioParamType m_paramType; |
181 | 187 |
182 // Intrinsic value | 188 // Intrinsic value |
183 float m_intrinsicValue; | 189 float m_intrinsicValue; |
184 void setIntrinsicValue(float newValue); | 190 void setIntrinsicValue(float newValue); |
185 | 191 |
186 float m_defaultValue; | 192 float m_defaultValue; |
187 | 193 |
188 // Nominal range for the value | 194 // Nominal range for the value |
189 float m_minValue; | 195 float m_minValue; |
190 float m_maxValue; | 196 float m_maxValue; |
191 | 197 |
192 AudioParamTimeline m_timeline; | 198 AudioParamTimeline m_timeline; |
193 | 199 |
194 // The destination node used to get necessary information like the smaple rate
and context time. | 200 // The destination node used to get necessary information like the smaple rate |
| 201 // and context time. |
195 RefPtr<AudioDestinationHandler> m_destinationHandler; | 202 RefPtr<AudioDestinationHandler> m_destinationHandler; |
196 }; | 203 }; |
197 | 204 |
198 // AudioParam class represents web-exposed AudioParam interface. | 205 // AudioParam class represents web-exposed AudioParam interface. |
199 class AudioParam final : public GarbageCollectedFinalized<AudioParam>, | 206 class AudioParam final : public GarbageCollectedFinalized<AudioParam>, |
200 public ScriptWrappable { | 207 public ScriptWrappable { |
201 DEFINE_WRAPPERTYPEINFO(); | 208 DEFINE_WRAPPERTYPEINFO(); |
202 | 209 |
203 public: | 210 public: |
204 static AudioParam* create(BaseAudioContext&, | 211 static AudioParam* create(BaseAudioContext&, |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 | 260 |
254 void warnIfOutsideRange(const String& paramMethd, float value); | 261 void warnIfOutsideRange(const String& paramMethd, float value); |
255 | 262 |
256 RefPtr<AudioParamHandler> m_handler; | 263 RefPtr<AudioParamHandler> m_handler; |
257 Member<BaseAudioContext> m_context; | 264 Member<BaseAudioContext> m_context; |
258 }; | 265 }; |
259 | 266 |
260 } // namespace blink | 267 } // namespace blink |
261 | 268 |
262 #endif // AudioParam_h | 269 #endif // AudioParam_h |
OLD | NEW |