An AudioSource which takes another source as input, and buffers it using a thread.
More...
#include <juce_BufferingAudioSource.h>
An AudioSource which takes another source as input, and buffers it using a thread.
Create this as a wrapper around another thread, and it will read-ahead with a background thread to smooth out playback. You can either create one of these directly, or use it indirectly using an AudioTransportSource.
- See also
- PositionableAudioSource, AudioTransportSource
@tags{Audio}
◆ BufferingAudioSource()
Creates a BufferingAudioSource.
- Parameters
-
source | the input source to read from |
backgroundThread | a background thread that will be used for the background read-ahead. This object must not be deleted until after any BufferingAudioSources that are using it have been deleted! |
deleteSourceWhenDeleted | if true, then the input source object will be deleted when this object is deleted |
numberOfSamplesToBuffer | the size of buffer to use for reading ahead |
numberOfChannels | the number of channels that will be played |
prefillBufferOnPrepareToPlay | if true, then calling prepareToPlay on this object will block until the buffer has been filled |
◆ ~BufferingAudioSource()
juce::BufferingAudioSource::~BufferingAudioSource |
( |
| ) |
|
|
override |
Destructor.
The input source may be deleted depending on whether the deleteSourceWhenDeleted flag was set in the constructor.
◆ getNextAudioBlock()
◆ getNextReadPosition()
int64 juce::BufferingAudioSource::getNextReadPosition |
( |
| ) |
const |
|
overridevirtual |
◆ getTotalLength()
int64 juce::BufferingAudioSource::getTotalLength |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ getValidBufferRange()
Range<int> juce::BufferingAudioSource::getValidBufferRange |
( |
int |
numSamples | ) |
const |
|
private |
◆ isLooping()
bool juce::BufferingAudioSource::isLooping |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ prepareToPlay()
void juce::BufferingAudioSource::prepareToPlay |
( |
int |
samplesPerBlockExpected, |
|
|
double |
sampleRate |
|
) |
| |
|
overridevirtual |
◆ readBufferSection()
void juce::BufferingAudioSource::readBufferSection |
( |
int64 |
start, |
|
|
int |
length, |
|
|
int |
bufferOffset |
|
) |
| |
|
private |
◆ readNextBufferChunk()
bool juce::BufferingAudioSource::readNextBufferChunk |
( |
| ) |
|
|
private |
◆ releaseResources()
void juce::BufferingAudioSource::releaseResources |
( |
| ) |
|
|
overridevirtual |
◆ setLooping()
virtual void juce::PositionableAudioSource::setLooping |
( |
bool |
shouldLoop | ) |
|
|
inlinevirtualinherited |
◆ setNextReadPosition()
void juce::BufferingAudioSource::setNextReadPosition |
( |
int64 |
newPosition | ) |
|
|
overridevirtual |
◆ useTimeSlice()
int juce::BufferingAudioSource::useTimeSlice |
( |
| ) |
|
|
overrideprivatevirtual |
Called back by a TimeSliceThread.
When you register this class with it, a TimeSliceThread will repeatedly call this method.
The implementation of this method should use its time-slice to do something that's quick - never block for longer than absolutely necessary.
- Returns
- Your method should return the number of milliseconds which it would like to wait before being called again. Returning 0 will make the thread call again as soon as possible (after possibly servicing other busy clients). If you return a value below zero, your client will be removed from the list of clients, and won't be called again. The value you specify isn't a guarantee, and is only used as a hint by the thread - the actual time before the next callback may be more or less than specified. You can force the TimeSliceThread to wake up and poll again immediately by calling its notify() method.
Implements juce::TimeSliceClient.
◆ waitForNextAudioBlockReady()
A useful function to block until the next the buffer info can be filled.
This is useful for offline rendering.
◆ backgroundThread
◆ buffer
◆ bufferRangeLock
◆ bufferReadyEvent
◆ bufferValidEnd
int64 juce::BufferingAudioSource::bufferValidEnd = 0 |
|
private |
◆ bufferValidStart
int64 juce::BufferingAudioSource::bufferValidStart = 0 |
|
private |
◆ callbackLock
◆ isPrepared
bool juce::BufferingAudioSource::isPrepared = false |
|
private |
◆ nextCallTime
Time juce::TimeSliceClient::nextCallTime |
|
privateinherited |
◆ nextPlayPos
std::atomic<int64> juce::BufferingAudioSource::nextPlayPos { 0 } |
|
private |
◆ numberOfChannels
int juce::BufferingAudioSource::numberOfChannels |
|
private |
◆ numberOfSamplesToBuffer
int juce::BufferingAudioSource::numberOfSamplesToBuffer |
|
private |
◆ prefillBuffer
const bool juce::BufferingAudioSource::prefillBuffer |
|
private |
◆ sampleRate
double juce::BufferingAudioSource::sampleRate = 0 |
|
private |
◆ source
◆ wasSourceLooping
bool juce::BufferingAudioSource::wasSourceLooping = false |
|
private |
The documentation for this class was generated from the following file: