| 66 | } |
| 67 | |
| 68 | void DelayDSPKernel::process(ContextRenderLock & r, const float * source, float * destination, int framesToProcess) |
| 69 | { |
| 70 | size_t bufferLength = m_buffer.size(); |
| 71 | float * buffer = m_buffer.data(); |
| 72 | |
| 73 | ASSERT(bufferLength); |
| 74 | if (!bufferLength) |
| 75 | return; |
| 76 | |
| 77 | ASSERT(source && destination); |
| 78 | if (!source || !destination) |
| 79 | return; |
| 80 | |
| 81 | float sampleRate = r.context()->sampleRate(); |
| 82 | double delayTime = 0; |
| 83 | float * delayTimes = m_delayTimes.data(); |
| 84 | double maxTime = maxDelayTime(); |
| 85 | |
| 86 | #if 1 |
| 87 | /// @TODO before deleting the else clause here, is there a legitimate reason to have the delayTime be automated? |
| 88 | /// is it not just a setting? If it's actually an audio rate signal, then delayTime should be switched back |
| 89 | /// from AudioSetting to AudioParam. |
| 90 | delayTime = delayProcessor() ? delayProcessor()->delayTime()->valueFloat() : m_desiredDelayFrames / sampleRate; |
| 91 | |
| 92 | // Make sure the delay time is in a valid range. |
| 93 | delayTime = min(maxTime, delayTime); |
| 94 | delayTime = max(0.0, delayTime); |
| 95 | |
| 96 | if (m_firstTime) |
| 97 | { |
| 98 | m_currentDelayTime = delayTime; |
| 99 | m_firstTime = false; |
| 100 | } |
| 101 | bool sampleAccurate = false; |
| 102 | #else |
| 103 | bool sampleAccurate = delayProcessor() && delayProcessor()->delayTime()->hasSampleAccurateValues(); |
| 104 | |
| 105 | if (sampleAccurate) |
| 106 | delayProcessor()->delayTime()->calculateSampleAccurateValues(r, delayTimes, framesToProcess); |
| 107 | else |
| 108 | { |
| 109 | delayTime = delayProcessor() ? delayProcessor()->delayTime()->finalValue(r) : m_desiredDelayFrames / sampleRate; |
| 110 | |
| 111 | // Make sure the delay time is in a valid range. |
| 112 | delayTime = min(maxTime, delayTime); |
| 113 | delayTime = max(0.0, delayTime); |
| 114 | |
| 115 | if (m_firstTime) |
| 116 | { |
| 117 | m_currentDelayTime = delayTime; |
| 118 | m_firstTime = false; |
| 119 | } |
| 120 | } |
| 121 | #endif |
| 122 | |
| 123 | for (int i = 0; i < framesToProcess; ++i) |
| 124 | { |
| 125 | if (sampleAccurate) |
nothing calls this directly
no test coverage detected