Here is three pieces of code, which I thought would produce the exact same results, but does not.
Note for all three examples, in between reading and writing samples, I am doing some “wavefolding”, that is processing signals that exceeds -1 or 1, so overflow wraps down into valid range.
- First one is what I need;
while (voiceSamples < numSamples)
{
// Read sample
signal = TGVoiceBuffer.getSample (0, voiceSamples) * multiplier;
// Wrap signal here
// Write sample
TGVoiceBuffer.setSample (0, voiceSamples, signal);
++voiceSamples;
}
TGVoiceBuffer.applyGain (multiplier);
while (voiceSamples < numSamples)
{
// Read sample
signal = TGVoiceBuffer.getSample (0, voiceSamples);
// Wrap signal here
// Write sample
TGVoiceBuffer.setSample (0, voiceSamples, signal);
++voiceSamples;
}
FloatVectorOperations::multiply (TGVoiceBuffer.getWritePointer (0, 0), multiplier, numSamples);
while (voiceSamples < numSamples)
{
// Read sample
signal = TGVoiceBuffer.getSample (0, voiceSamples);
// Wrap signal here
// Write sample
TGVoiceBuffer.setSample (0, voiceSamples, signal);
++voiceSamples;
}
The samples produces by gain on method 2 and multiplication on method 3, is different from method one, which is what I need.
How, if possible, do I use FloatVectorOperations, so it does exactly as in first example?
