33 releaseMasterResources();
38 double sourceSampleRateToCorrectFor,
int maxNumChannels)
40 if (source == newSource)
42 if (source ==
nullptr)
48 readAheadBufferSize = readAheadSize;
49 sourceSampleRate = sourceSampleRateToCorrectFor;
56 std::unique_ptr<ResamplingAudioSource> oldResamplerSource (resamplerSource);
57 std::unique_ptr<BufferingAudioSource> oldBufferingSource (bufferingSource);
60 if (newSource !=
nullptr)
62 newPositionableSource = newSource;
64 if (readAheadSize > 0)
68 jassert (readAheadThread !=
nullptr);
70 newPositionableSource = newBufferingSource
72 false, readAheadSize, maxNumChannels);
77 if (sourceSampleRateToCorrectFor > 0)
78 newMasterSource = newResamplerSource
81 newMasterSource = newPositionableSource;
85 if (newResamplerSource !=
nullptr && sourceSampleRate > 0 && sampleRate > 0)
96 resamplerSource = newResamplerSource;
97 bufferingSource = newBufferingSource;
98 masterSource = newMasterSource;
99 positionableSource = newPositionableSource;
101 inputStreamEOF =
false;
105 if (oldMasterSource !=
nullptr)
111 if ((! playing) && masterSource !=
nullptr)
117 inputStreamEOF =
false;
131 while (--n >= 0 && ! stopped)
140 if (sampleRate > 0.0)
146 if (sampleRate > 0.0)
154 if (sampleRate > 0.0)
162 if (positionableSource !=
nullptr)
164 if (sampleRate > 0 && sourceSampleRate > 0)
165 newPosition = (int64) ((
double) newPosition * sourceSampleRate / sampleRate);
169 if (resamplerSource !=
nullptr)
172 inputStreamEOF =
false;
178 if (positionableSource !=
nullptr)
180 const double ratio = (sampleRate > 0 && sourceSampleRate > 0) ? sampleRate / sourceSampleRate : 1.0;
191 if (positionableSource !=
nullptr)
193 const double ratio = (sampleRate > 0 && sourceSampleRate > 0) ? sampleRate / sourceSampleRate : 1.0;
194 return (int64) ((double) positionableSource->
getTotalLength() * ratio);
203 return positionableSource !=
nullptr && positionableSource->
isLooping();
215 sampleRate = newSampleRate;
216 blockSize = samplesPerBlockExpected;
218 if (masterSource !=
nullptr)
219 masterSource->
prepareToPlay (samplesPerBlockExpected, sampleRate);
221 if (resamplerSource !=
nullptr && sourceSampleRate > 0)
224 inputStreamEOF =
false;
228 void AudioTransportSource::releaseMasterResources()
232 if (masterSource !=
nullptr)
240 releaseMasterResources();
247 if (masterSource !=
nullptr && ! stopped)
265 inputStreamEOF =
true;
void clearActiveBufferRegion() const
void setGain(float newGain) noexcept
double getCurrentPosition() const
virtual void getNextAudioBlock(const AudioSourceChannelInfo &bufferToFill)=0
~AudioTransportSource() override
int64 getTotalLength() const override
virtual void releaseResources()=0
virtual int64 getTotalLength() const =0
virtual int64 getNextReadPosition() const =0
void prepareToPlay(int samplesPerBlockExpected, double sampleRate) override
void releaseResources() override
int getNumChannels() const noexcept
void setNextReadPosition(int64 newPosition) override
virtual void prepareToPlay(int samplesPerBlockExpected, double sampleRate)=0
bool isLooping() const override
virtual void setNextReadPosition(int64 newPosition)=0
void setPosition(double newPosition)
void setSource(PositionableAudioSource *newSource, int readAheadBufferSize=0, TimeSliceThread *readAheadThread=nullptr, double sourceSampleRateToCorrectFor=0.0, int maxNumChannels=2)
void applyGainRamp(int channel, int startSample, int numSamples, Type startGain, Type endGain) noexcept
virtual bool isLooping() const =0
void getNextAudioBlock(const AudioSourceChannelInfo &) override
AudioBuffer< float > * buffer
double getLengthInSeconds() const
void setResamplingRatio(double samplesInPerOutputSample)
static void JUCE_CALLTYPE sleep(int milliseconds)
int64 getNextReadPosition() const override