94 void process (
const ProcessContext& context)
noexcept
96 auto&& inBlock = context.getInputBlock();
97 auto&& outBlock = context.getOutputBlock();
99 jassert (inBlock.getNumChannels() == outBlock.getNumChannels());
100 jassert (inBlock.getNumSamples() == outBlock.getNumSamples());
102 auto len = inBlock.getNumSamples();
103 auto numChannels = inBlock.getNumChannels();
105 if (context.isBypassed)
107 gain.skip (
static_cast<int> (len));
109 if (context.usesSeparateInputAndOutputBlocks())
110 outBlock.copyFrom (inBlock);
115 if (numChannels == 1)
117 auto* src = inBlock.getChannelPointer (0);
118 auto* dst = outBlock.getChannelPointer (0);
120 for (
size_t i = 0; i < len; ++i)
121 dst[i] = src[i] * gain.getNextValue();
125 JUCE_BEGIN_IGNORE_WARNINGS_MSVC (6255 6386)
126 auto* gains =
static_cast<FloatType*
> (alloca (
sizeof (FloatType) * len));
128 for (
size_t i = 0; i < len; ++i)
129 gains[i] = gain.getNextValue();
130 JUCE_END_IGNORE_WARNINGS_MSVC
132 for (
size_t chan = 0; chan < numChannels; ++chan)
133 FloatVectorOperations::multiply (outBlock.getChannelPointer (chan),
134 inBlock.getChannelPointer (chan),
135 gains,
static_cast<int> (len));