| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012, Google Inc. All rights reserved. | 2 * Copyright (C) 2012, 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 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 } | 129 } |
| 130 | 130 |
| 131 setPeriodicWave(periodicWave); | 131 setPeriodicWave(periodicWave); |
| 132 m_type = type; | 132 m_type = type; |
| 133 return true; | 133 return true; |
| 134 } | 134 } |
| 135 | 135 |
| 136 bool OscillatorHandler::calculateSampleAccuratePhaseIncrements(size_t framesToPr
ocess) | 136 bool OscillatorHandler::calculateSampleAccuratePhaseIncrements(size_t framesToPr
ocess) |
| 137 { | 137 { |
| 138 bool isGood = framesToProcess <= m_phaseIncrements.size() && framesToProcess
<= m_detuneValues.size(); | 138 bool isGood = framesToProcess <= m_phaseIncrements.size() && framesToProcess
<= m_detuneValues.size(); |
| 139 ASSERT(isGood); | 139 DCHECK(isGood); |
| 140 if (!isGood) | 140 if (!isGood) |
| 141 return false; | 141 return false; |
| 142 | 142 |
| 143 if (m_firstRender) { | 143 if (m_firstRender) { |
| 144 m_firstRender = false; | 144 m_firstRender = false; |
| 145 m_frequency->resetSmoothedValue(); | 145 m_frequency->resetSmoothedValue(); |
| 146 m_detune->resetSmoothedValue(); | 146 m_detune->resetSmoothedValue(); |
| 147 } | 147 } |
| 148 | 148 |
| 149 bool hasSampleAccurateValues = false; | 149 bool hasSampleAccurateValues = false; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 | 201 |
| 202 void OscillatorHandler::process(size_t framesToProcess) | 202 void OscillatorHandler::process(size_t framesToProcess) |
| 203 { | 203 { |
| 204 AudioBus* outputBus = output(0).bus(); | 204 AudioBus* outputBus = output(0).bus(); |
| 205 | 205 |
| 206 if (!isInitialized() || !outputBus->numberOfChannels()) { | 206 if (!isInitialized() || !outputBus->numberOfChannels()) { |
| 207 outputBus->zero(); | 207 outputBus->zero(); |
| 208 return; | 208 return; |
| 209 } | 209 } |
| 210 | 210 |
| 211 ASSERT(framesToProcess <= m_phaseIncrements.size()); | 211 DCHECK(framesToProcess <= m_phaseIncrements.size()); |
| 212 if (framesToProcess > m_phaseIncrements.size()) | 212 if (framesToProcess > m_phaseIncrements.size()) |
| 213 return; | 213 return; |
| 214 | 214 |
| 215 // The audio thread can't block on this lock, so we call tryLock() instead. | 215 // The audio thread can't block on this lock, so we call tryLock() instead. |
| 216 MutexTryLocker tryLocker(m_processLock); | 216 MutexTryLocker tryLocker(m_processLock); |
| 217 if (!tryLocker.locked()) { | 217 if (!tryLocker.locked()) { |
| 218 // Too bad - the tryLock() failed. We must be in the middle of changing
wave-tables. | 218 // Too bad - the tryLock() failed. We must be in the middle of changing
wave-tables. |
| 219 outputBus->zero(); | 219 outputBus->zero(); |
| 220 return; | 220 return; |
| 221 } | 221 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 234 if (!nonSilentFramesToProcess) { | 234 if (!nonSilentFramesToProcess) { |
| 235 outputBus->zero(); | 235 outputBus->zero(); |
| 236 return; | 236 return; |
| 237 } | 237 } |
| 238 | 238 |
| 239 unsigned periodicWaveSize = m_periodicWave->periodicWaveSize(); | 239 unsigned periodicWaveSize = m_periodicWave->periodicWaveSize(); |
| 240 double invPeriodicWaveSize = 1.0 / periodicWaveSize; | 240 double invPeriodicWaveSize = 1.0 / periodicWaveSize; |
| 241 | 241 |
| 242 float* destP = outputBus->channel(0)->mutableData(); | 242 float* destP = outputBus->channel(0)->mutableData(); |
| 243 | 243 |
| 244 ASSERT(quantumFrameOffset <= framesToProcess); | 244 DCHECK(quantumFrameOffset <= framesToProcess); |
| 245 | 245 |
| 246 // We keep virtualReadIndex double-precision since we're accumulating values
. | 246 // We keep virtualReadIndex double-precision since we're accumulating values
. |
| 247 double virtualReadIndex = m_virtualReadIndex; | 247 double virtualReadIndex = m_virtualReadIndex; |
| 248 | 248 |
| 249 float rateScale = m_periodicWave->rateScale(); | 249 float rateScale = m_periodicWave->rateScale(); |
| 250 float invRateScale = 1 / rateScale; | 250 float invRateScale = 1 / rateScale; |
| 251 bool hasSampleAccurateValues = calculateSampleAccuratePhaseIncrements(frames
ToProcess); | 251 bool hasSampleAccurateValues = calculateSampleAccuratePhaseIncrements(frames
ToProcess); |
| 252 | 252 |
| 253 float frequency = 0; | 253 float frequency = 0; |
| 254 float* higherWaveData = 0; | 254 float* higherWaveData = 0; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 virtualReadIndex -= floor(virtualReadIndex * invPeriodicWaveSize) * peri
odicWaveSize; | 307 virtualReadIndex -= floor(virtualReadIndex * invPeriodicWaveSize) * peri
odicWaveSize; |
| 308 } | 308 } |
| 309 | 309 |
| 310 m_virtualReadIndex = virtualReadIndex; | 310 m_virtualReadIndex = virtualReadIndex; |
| 311 | 311 |
| 312 outputBus->clearSilentFlag(); | 312 outputBus->clearSilentFlag(); |
| 313 } | 313 } |
| 314 | 314 |
| 315 void OscillatorHandler::setPeriodicWave(PeriodicWave* periodicWave) | 315 void OscillatorHandler::setPeriodicWave(PeriodicWave* periodicWave) |
| 316 { | 316 { |
| 317 ASSERT(isMainThread()); | 317 DCHECK(isMainThread()); |
| 318 ASSERT(periodicWave); | 318 DCHECK(periodicWave); |
| 319 | 319 |
| 320 // This synchronizes with process(). | 320 // This synchronizes with process(). |
| 321 MutexLocker processLocker(m_processLock); | 321 MutexLocker processLocker(m_processLock); |
| 322 m_periodicWave = periodicWave; | 322 m_periodicWave = periodicWave; |
| 323 m_type = CUSTOM; | 323 m_type = CUSTOM; |
| 324 } | 324 } |
| 325 | 325 |
| 326 bool OscillatorHandler::propagatesSilence() const | 326 bool OscillatorHandler::propagatesSilence() const |
| 327 { | 327 { |
| 328 return !isPlayingOrScheduled() || hasFinished() || !m_periodicWave.get(); | 328 return !isPlayingOrScheduled() || hasFinished() || !m_periodicWave.get(); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 return m_detune; | 386 return m_detune; |
| 387 } | 387 } |
| 388 | 388 |
| 389 void OscillatorNode::setPeriodicWave(PeriodicWave* wave) | 389 void OscillatorNode::setPeriodicWave(PeriodicWave* wave) |
| 390 { | 390 { |
| 391 oscillatorHandler().setPeriodicWave(wave); | 391 oscillatorHandler().setPeriodicWave(wave); |
| 392 } | 392 } |
| 393 | 393 |
| 394 } // namespace blink | 394 } // namespace blink |
| 395 | 395 |
| OLD | NEW |