31 #include "../include/AudioBufferSource.h"
37 AudioBufferSource::AudioBufferSource(juce::AudioSampleBuffer *audio_buffer)
38 : position(0), start(0), repeat(false), buffer(audio_buffer)
51 int buffer_samples = buffer->getNumSamples();
52 int buffer_channels = buffer->getNumChannels();
54 if (info.numSamples > 0) {
56 int number_to_copy = 0;
59 if (start + info.numSamples <= buffer_samples)
62 number_to_copy = info.numSamples;
64 else if (start > buffer_samples)
69 else if (buffer_samples - start > 0)
72 number_to_copy = buffer_samples - start;
81 if (number_to_copy > 0)
84 for (
int channel = 0; channel < buffer_channels; channel++)
85 info.buffer->copyFrom(channel, info.startSample, *buffer, channel, start, number_to_copy);
88 position += number_to_copy;
104 if (newPosition >= 0 && newPosition < buffer->getNumSamples())
105 position = newPosition;
119 return buffer->getNumSamples();
139 buffer = audio_buffer;
juce::int64 getTotalLength() const
Get the total length (in samples) of this audio source.
void setNextReadPosition(juce::int64 newPosition)
Set the next read position of this source.
void setLooping(bool shouldLoop)
Set if this audio source should repeat when it reaches the end.
void setBuffer(juce::AudioSampleBuffer *audio_buffer)
Update the internal buffer used by this source.
void prepareToPlay(int, double)
Prepare to play this audio source.
~AudioBufferSource()
Destructor.
bool isLooping() const
Determines if this audio source should repeat when it reaches the end.
void getNextAudioBlock(const juce::AudioSourceChannelInfo &info)
Get the next block of audio samples.
void releaseResources()
Release all resources.
This namespace is the default namespace for all code in the openshot library.
juce::int64 getNextReadPosition() const
Get the next read position of this source.