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:
parent
31087226bc
commit
008d3a36b6
3 changed files with 18 additions and 6 deletions
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue