void ReversibleAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& info) { if (isForwards) { input->getNextAudioBlock (info); } else { int64 nextReadPosition = input->getNextReadPosition() - (2 * info.numSamples); if (nextReadPosition < 0 && input->isLooping()) nextReadPosition += input->getTotalLength(); input->setNextReadPosition (nextReadPosition); input->getNextAudioBlock (info); if (info.buffer->getNumChannels() == 1) { reverseArray (info.buffer->getSampleData (0), info.numSamples); } else if (info.buffer->getNumChannels() == 2) { reverseTwoArrays (info.buffer->getSampleData (0), info.buffer->getSampleData (1), info.numSamples); } else { for (int c = 0; c < info.buffer->getNumChannels(); c++) reverseArray (info.buffer->getSampleData(c), info.numSamples); } } }
void ReversibleAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& info) { if (isForwards) { input->getNextAudioBlock (info); previousReadPosition = input->getNextReadPosition(); } else { int64 nextReadPosition = previousReadPosition - info.numSamples; if (nextReadPosition < 0 && input->isLooping()) nextReadPosition += input->getTotalLength(); input->setNextReadPosition (nextReadPosition); input->getNextAudioBlock (info); if (info.buffer->getNumChannels() == 1) { reverseArray (info.buffer->getWritePointer (0) + info.startSample, info.numSamples); } else if (info.buffer->getNumChannels() == 2) { reverseTwoArrays (info.buffer->getWritePointer (0) + info.startSample, info.buffer->getWritePointer (1) + info.startSample, info.numSamples); } else { for (int c = 0; c < info.buffer->getNumChannels(); c++) reverseArray (info.buffer->getWritePointer (c) + info.startSample, info.numSamples); } previousReadPosition = nextReadPosition; } }