| 134 | } |
| 135 | |
| 136 | float AudioParamTimeline::valueForContextTime( |
| 137 | ContextRenderLock & r, |
| 138 | float defaultValue, bool & hasValue) |
| 139 | { |
| 140 | auto context = r.context(); |
| 141 | if (!context) |
| 142 | return defaultValue; |
| 143 | |
| 144 | std::unique_lock<std::mutex> lock(m_eventsMutex, std::try_to_lock); |
| 145 | if (!lock.owns_lock() || !m_events.size() || context->currentTime() < m_events[0].time()) |
| 146 | { |
| 147 | hasValue = false; |
| 148 | return defaultValue; |
| 149 | } |
| 150 | |
| 151 | // Ask for just a single value. |
| 152 | double sampleRate = context->sampleRate(); |
| 153 | double startTime = context->currentTime(); |
| 154 | double endTime = startTime + 1.1 / sampleRate; // time just beyond one sample-frame |
| 155 | double controlRate = sampleRate / AudioNode::ProcessingSizeInFrames; // one parameter change per render quantum |
| 156 | float value = valuesForTimeRange(startTime, endTime, defaultValue, &value, 1, sampleRate, controlRate); |
| 157 | |
| 158 | hasValue = true; |
| 159 | return value; |
| 160 | } |
| 161 | |
| 162 | float AudioParamTimeline::valuesForTimeRange( |
| 163 | double startTime, |
no test coverage detected