28 bool deleteSourceWhenDeleted,
29 int bufferSizeSamples,
31 bool prefillBufferOnPrepareToPlay)
32 :
source (
s, deleteSourceWhenDeleted),
55 || bufferSizeNeeded !=
buffer.getNumSamples()
63 source->prepareToPlay (samplesPerBlockExpected, newSampleRate);
98 source->releaseResources();
105 if (bufferRange.isEmpty())
108 info.clearActiveBufferRegion();
112 const auto validStart = bufferRange.getStart();
113 const auto validEnd = bufferRange.getEnd();
118 info.buffer->clear (
info.startSample, validStart);
120 if (validEnd <
info.numSamples)
121 info.buffer->clear (
info.startSample + validEnd,
122 info.numSamples - validEnd);
124 if (validStart < validEnd)
133 if (startBufferIndex < endBufferIndex)
135 info.buffer->copyFrom (chan,
info.startSample + validStart,
137 chan, startBufferIndex,
138 validEnd - validStart);
142 const auto initialSize =
buffer.getNumSamples() - startBufferIndex;
144 info.buffer->copyFrom (chan,
info.startSample + validStart,
146 chan, startBufferIndex,
149 info.buffer->copyFrom (chan,
info.startSample + validStart + initialSize,
152 (validEnd - validStart) - initialSize);
170 auto now = startTime;
172 auto elapsed = (now >= startTime ? now - startTime
173 : (std::numeric_limits<uint32>::max() - startTime) + now);
179 const auto validStart = bufferRange.getStart();
180 const auto validEnd = bufferRange.getEnd();
183 && validStart < validEnd
184 && validEnd >=
info.numSamples)
196 elapsed = (now >= startTime ? now - startTime
197 : (std::numeric_limits<uint32>::max() - startTime) + now);
209 ? pos %
source->getTotalLength()
233 int64 newBVS, newBVE, sectionToReadStart, sectionToReadEnd;
246 newBVE = newBVS +
buffer.getNumSamples() - 4;
247 sectionToReadStart = 0;
248 sectionToReadEnd = 0;
250 constexpr int maxChunkSize = 2048;
254 newBVE =
jmin (newBVE, newBVS + maxChunkSize);
256 sectionToReadStart = newBVS;
257 sectionToReadEnd = newBVE;
268 sectionToReadEnd = newBVE;
275 if (sectionToReadStart == sectionToReadEnd)
280 const auto bufferIndexStart = (
int) (sectionToReadStart %
buffer.getNumSamples());
281 const auto bufferIndexEnd = (
int) (sectionToReadEnd %
buffer.getNumSamples());
283 if (bufferIndexStart < bufferIndexEnd)
286 (
int) (sectionToReadEnd - sectionToReadStart),
291 const auto initialSize =
buffer.getNumSamples() - bufferIndexStart;
298 (
int) (sectionToReadEnd - sectionToReadStart) - initialSize,
Type jmin(const Type a, const Type b)
Definition MathsFunctions.h:60
Type jmax(const Type a, const Type b)
Definition MathsFunctions.h:48
void getNextAudioBlock(const AudioSourceChannelInfo &) override
Definition juce_BufferingAudioSource.cpp:101
OptionalScopedPointer< PositionableAudioSource > source
Definition juce_BufferingAudioSource.h:108
CriticalSection callbackLock
Definition juce_BufferingAudioSource.h:112
void setNextReadPosition(int64 newPosition) override
Definition juce_BufferingAudioSource.cpp:213
WaitableEvent bufferReadyEvent
Definition juce_BufferingAudioSource.h:113
CriticalSection bufferRangeLock
Definition juce_BufferingAudioSource.h:112
int useTimeSlice() override
Definition juce_BufferingAudioSource.cpp:324
int numberOfChannels
Definition juce_BufferingAudioSource.h:110
int64 getTotalLength() const override
Definition juce_BufferingAudioSource.h:89
~BufferingAudioSource() override
Definition juce_BufferingAudioSource.cpp:44
bool isPrepared
Definition juce_BufferingAudioSource.h:117
bool readNextBufferChunk()
Definition juce_BufferingAudioSource.cpp:231
BufferingAudioSource(PositionableAudioSource *source, TimeSliceThread &backgroundThread, bool deleteSourceWhenDeleted, int numberOfSamplesToBuffer, int numberOfChannels=2, bool prefillBufferOnPrepareToPlay=true)
Definition juce_BufferingAudioSource.cpp:26
int numberOfSamplesToBuffer
Definition juce_BufferingAudioSource.h:110
bool isLooping() const override
Definition juce_BufferingAudioSource.h:92
AudioBuffer< float > buffer
Definition juce_BufferingAudioSource.h:111
double sampleRate
Definition juce_BufferingAudioSource.h:116
TimeSliceThread & backgroundThread
Definition juce_BufferingAudioSource.h:109
Range< int > getValidBufferRange(int numSamples) const
Definition juce_BufferingAudioSource.cpp:221
int64 bufferValidStart
Definition juce_BufferingAudioSource.h:114
bool wasSourceLooping
Definition juce_BufferingAudioSource.h:117
void readBufferSection(int64 start, int length, int bufferOffset)
Definition juce_BufferingAudioSource.cpp:313
int64 bufferValidEnd
Definition juce_BufferingAudioSource.h:114
const bool prefillBuffer
Definition juce_BufferingAudioSource.h:118
void releaseResources() override
Definition juce_BufferingAudioSource.cpp:87
bool waitForNextAudioBlockReady(const AudioSourceChannelInfo &info, const uint32 timeout)
Definition juce_BufferingAudioSource.cpp:160
int64 getNextReadPosition() const override
Definition juce_BufferingAudioSource.cpp:203
std::atomic< int64 > nextPlayPos
Definition juce_BufferingAudioSource.h:115
void prepareToPlay(int samplesPerBlockExpected, double sampleRate) override
Definition juce_BufferingAudioSource.cpp:50
PositionableAudioSource()=default
Definition juce_Range.h:40
static void JUCE_CALLTYPE sleep(int milliseconds)
Definition juce_posix_SharedCode.h:44
static uint32 getMillisecondCounter() noexcept
Definition juce_Time.cpp:241
friend class TimeSliceThread
Definition juce_TimeSliceThread.h:68
unsigned s
Definition inflate.c:1555
static double timeout
Definition pugl.h:1799
virtual ASIOError start()=0
struct backing_store_struct * info
Definition jmemsys.h:183
Definition carla_juce.cpp:31
CriticalSection::ScopedLockType ScopedLock
Definition juce_CriticalSection.h:186
constexpr Type jmin(Type a, Type b)
Definition juce_MathsFunctions.h:106
unsigned int uint32
Definition juce_MathsFunctions.h:45
constexpr Type jmax(Type a, Type b)
Definition juce_MathsFunctions.h:94
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
Definition juce_MathsFunctions.h:262
long long int64
Definition juce_MathsFunctions.h:54
CriticalSection::ScopedUnlockType ScopedUnlock
Definition juce_CriticalSection.h:226
png_uint_32 length
Definition png.c:2247
Definition juce_AudioSource.h:33
typedef int(UZ_EXP MsgFn)()