| 94 | } |
| 95 | |
| 96 | void LiveGranulator::ProcessAudio(double time, ChannelBuffer* buffer) |
| 97 | { |
| 98 | PROFILER(LiveGranulator); |
| 99 | |
| 100 | float bufferSize = buffer->BufferSize(); |
| 101 | mBuffer.SetNumChannels(buffer->NumActiveChannels()); |
| 102 | |
| 103 | for (int i = 0; i < bufferSize; ++i) |
| 104 | { |
| 105 | ComputeSliders(i); |
| 106 | |
| 107 | mGranulator.SetLiveMode(!mFreeze); |
| 108 | if (!mFreeze) |
| 109 | { |
| 110 | for (int ch = 0; ch < buffer->NumActiveChannels(); ++ch) |
| 111 | mBuffer.Write(buffer->GetChannel(ch)[i], ch); |
| 112 | } |
| 113 | else if (mFreezeExtraSamples < FREEZE_EXTRA_SAMPLES_COUNT) |
| 114 | { |
| 115 | ++mFreezeExtraSamples; |
| 116 | for (int ch = 0; ch < buffer->NumActiveChannels(); ++ch) |
| 117 | mBuffer.Write(buffer->GetChannel(ch)[i], ch); |
| 118 | } |
| 119 | |
| 120 | if (mEnabled) |
| 121 | { |
| 122 | float sample[ChannelBuffer::kMaxNumChannels]; |
| 123 | Clear(sample, ChannelBuffer::kMaxNumChannels); |
| 124 | mGranulator.ProcessFrame(time, mBuffer.GetRawBuffer(), mBufferLength, mBuffer.GetRawBufferOffset(0) - mFreezeExtraSamples - 1 + mPos, 1.0f, sample); |
| 125 | for (int ch = 0; ch < buffer->NumActiveChannels(); ++ch) |
| 126 | buffer->GetChannel(ch)[i] = mDry * buffer->GetChannel(ch)[i] + sample[ch]; |
| 127 | } |
| 128 | |
| 129 | time += gInvSampleRateMs; |
| 130 | } |
| 131 | } |
| 132 | |
| 133 | void LiveGranulator::DrawModule() |
| 134 | { |
nothing calls this directly
no test coverage detected