33 releaseMasterResources();
38 double sourceSampleRateToCorrectFor,
int maxNumChannels)
40 if (source == newSource)
42 if (source ==
nullptr)
53 std::unique_ptr<ResamplingAudioSource> oldResamplerSource (resamplerSource);
54 std::unique_ptr<BufferingAudioSource> oldBufferingSource (bufferingSource);
57 if (newSource !=
nullptr)
59 newPositionableSource = newSource;
61 if (readAheadSize > 0)
65 jassert (readAheadThread !=
nullptr);
67 newPositionableSource = newBufferingSource
69 false, readAheadSize, maxNumChannels);
74 if (sourceSampleRateToCorrectFor > 0)
75 newMasterSource = newResamplerSource
78 newMasterSource = newPositionableSource;
82 if (newResamplerSource !=
nullptr && sourceSampleRateToCorrectFor > 0 && sampleRate > 0)
93 resamplerSource = newResamplerSource;
94 bufferingSource = newBufferingSource;
95 masterSource = newMasterSource;
96 positionableSource = newPositionableSource;
97 readAheadBufferSize = readAheadSize;
98 sourceSampleRate = sourceSampleRateToCorrectFor;
103 if (oldMasterSource !=
nullptr)
109 if ((! playing) && masterSource !=
nullptr)
128 while (--n >= 0 && ! stopped)
137 if (sampleRate > 0.0)
143 if (sampleRate > 0.0)
151 if (sampleRate > 0.0)
165 if (positionableSource !=
nullptr)
167 if (sampleRate > 0 && sourceSampleRate > 0)
168 newPosition = (int64) ((
double) newPosition * sourceSampleRate / sampleRate);
172 if (resamplerSource !=
nullptr)
181 if (positionableSource !=
nullptr)
183 const double ratio = (sampleRate > 0 && sourceSampleRate > 0) ? sampleRate / sourceSampleRate : 1.0;
194 if (positionableSource !=
nullptr)
196 const double ratio = (sampleRate > 0 && sourceSampleRate > 0) ? sampleRate / sourceSampleRate : 1.0;
197 return (int64) ((double) positionableSource->
getTotalLength() * ratio);
206 return positionableSource !=
nullptr && positionableSource->
isLooping();
218 sampleRate = newSampleRate;
219 blockSize = samplesPerBlockExpected;
221 if (masterSource !=
nullptr)
222 masterSource->
prepareToPlay (samplesPerBlockExpected, sampleRate);
224 if (resamplerSource !=
nullptr && sourceSampleRate > 0)
230void AudioTransportSource::releaseMasterResources()
234 if (masterSource !=
nullptr)
242 releaseMasterResources();
249 if (masterSource !=
nullptr && ! stopped)
int getNumChannels() const noexcept
void applyGainRamp(int channel, int startSample, int numSamples, Type startGain, Type endGain) noexcept
virtual void releaseResources()=0
virtual void prepareToPlay(int samplesPerBlockExpected, double sampleRate)=0
virtual void getNextAudioBlock(const AudioSourceChannelInfo &bufferToFill)=0
bool hasStreamFinished() const noexcept
void prepareToPlay(int samplesPerBlockExpected, double sampleRate) override
int64 getNextReadPosition() const override
double getCurrentPosition() const
void releaseResources() override
void getNextAudioBlock(const AudioSourceChannelInfo &) override
int64 getTotalLength() const override
~AudioTransportSource() override
void setPosition(double newPosition)
double getLengthInSeconds() const
void setGain(float newGain) noexcept
void setSource(PositionableAudioSource *newSource, int readAheadBufferSize=0, TimeSliceThread *readAheadThread=nullptr, double sourceSampleRateToCorrectFor=0.0, int maxNumChannels=2)
bool isLooping() const override
void setNextReadPosition(int64 newPosition) override
virtual bool isLooping() const =0
virtual int64 getNextReadPosition() const =0
virtual int64 getTotalLength() const =0
virtual void setNextReadPosition(int64 newPosition)=0
void setResamplingRatio(double samplesInPerOutputSample)
static void JUCE_CALLTYPE sleep(int milliseconds)
void clearActiveBufferRegion() const
AudioBuffer< float > * buffer