1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Added method ResamplingAudioSource::flushBuffers()

This commit is contained in:
jules 2014-08-01 09:58:25 +01:00
parent 31087226bc
commit 008d3a36b6
3 changed files with 18 additions and 6 deletions

View file

@ -47,23 +47,28 @@ void ResamplingAudioSource::setResamplingRatio (const double samplesInPerOutputS
ratio = jmax (0.0, samplesInPerOutputSample); ratio = jmax (0.0, samplesInPerOutputSample);
} }
void ResamplingAudioSource::prepareToPlay (int samplesPerBlockExpected, void ResamplingAudioSource::prepareToPlay (int samplesPerBlockExpected, double sampleRate)
double sampleRate)
{ {
const SpinLock::ScopedLockType sl (ratioLock); const SpinLock::ScopedLockType sl (ratioLock);
input->prepareToPlay (samplesPerBlockExpected, sampleRate); input->prepareToPlay (samplesPerBlockExpected, sampleRate);
buffer.setSize (numChannels, roundToInt (samplesPerBlockExpected * ratio) + 32); buffer.setSize (numChannels, roundToInt (samplesPerBlockExpected * ratio) + 32);
buffer.clear();
sampsInBuffer = 0;
bufferPos = 0;
subSampleOffset = 0.0;
filterStates.calloc ((size_t) numChannels); filterStates.calloc ((size_t) numChannels);
srcBuffers.calloc ((size_t) numChannels); srcBuffers.calloc ((size_t) numChannels);
destBuffers.calloc ((size_t) numChannels); destBuffers.calloc ((size_t) numChannels);
createLowPass (ratio); createLowPass (ratio);
flushBuffers();
}
void ResamplingAudioSource::flushBuffers()
{
buffer.clear();
bufferPos = 0;
sampsInBuffer = 0;
subSampleOffset = 0.0;
resetFilters(); resetFilters();
} }

View file

@ -66,6 +66,9 @@ public:
*/ */
double getResamplingRatio() const noexcept { return ratio; } double getResamplingRatio() const noexcept { return ratio; }
/** Clears any buffers and filters that the resampler is using. */
void flushBuffers();
//============================================================================== //==============================================================================
void prepareToPlay (int samplesPerBlockExpected, double sampleRate) override; void prepareToPlay (int samplesPerBlockExpected, double sampleRate) override;
void releaseResources() override; void releaseResources() override;

View file

@ -182,6 +182,10 @@ void AudioTransportSource::setNextReadPosition (int64 newPosition)
newPosition = (int64) (newPosition * sourceSampleRate / sampleRate); newPosition = (int64) (newPosition * sourceSampleRate / sampleRate);
positionableSource->setNextReadPosition (newPosition); positionableSource->setNextReadPosition (newPosition);
if (resamplerSource != nullptr)
resamplerSource->flushBuffers();
inputStreamEOF = false; inputStreamEOF = false;
} }
} }