40 #ifndef FSPRO_AUDIOBASICS_AUDIOBUFFERFIFO_H_INCLUDED
41 #define FSPRO_AUDIOBASICS_AUDIOBUFFERFIFO_H_INCLUDED
49 template<
typename FloatType>
55 AbstractFifo (buffersize)
57 buffer.setSize (channels, buffersize);
61 void setSize (
const int channels,
const int newBufferSize)
63 buffer.setSize (channels, newBufferSize);
64 setTotalSize (newBufferSize);
69 void addToFifo (
const FloatType** samples,
int numSamples)
71 jassert (getFreeSpace() >= numSamples);
72 int start1, size1, start2, size2;
73 prepareToWrite (numSamples, start1, size1, start2, size2);
75 for (
int channel = 0; channel < buffer.getNumChannels(); ++channel)
76 buffer.copyFrom (channel, start1, samples[channel], size1);
78 for (
int channel = 0; channel < buffer.getNumChannels(); ++channel)
79 buffer.copyFrom (channel, start2, samples[channel] + size1, size2);
80 finishedWrite (size1 + size2);
84 void addToFifo (
const juce::AudioBuffer<FloatType>& samples,
int numSamples=-1)
86 const int addSamples = numSamples < 0 ? samples.getNumSamples() : numSamples;
87 jassert (getFreeSpace() >= addSamples);
89 int start1, size1, start2, size2;
90 prepareToWrite (addSamples, start1, size1, start2, size2);
92 for (
int channel = 0; channel < buffer.getNumChannels(); ++channel)
93 buffer.copyFrom (channel, start1, samples.getReadPointer (channel), size1);
95 for (
int channel = 0; channel < buffer.getNumChannels(); ++channel)
96 buffer.copyFrom (channel, start2, samples.getReadPointer (channel, size1), size2);
97 finishedWrite (size1 + size2);
104 jassert (getNumReady() >= numSamples);
105 int start1, size1, start2, size2;
106 prepareToRead (numSamples, start1, size1, start2, size2);
108 for (
int channel = 0; channel < buffer.getNumChannels(); ++channel)
109 juce::FloatVectorOperations::copy (samples [channel],
110 buffer.getReadPointer (channel, start1),
113 for (
int channel = 0; channel < buffer.getNumChannels(); ++channel)
114 juce::FloatVectorOperations::copy (samples [channel] + size1,
115 buffer.getReadPointer (channel, start2),
117 finishedRead (size1 + size2);
121 void readFromFifo (juce::AudioBuffer<FloatType>& samples,
int numSamples=-1)
123 const int readSamples = numSamples > 0 ? numSamples : samples.getNumSamples();
124 jassert (getNumReady() >= readSamples);
126 int start1, size1, start2, size2;
127 prepareToRead (readSamples, start1, size1, start2, size2);
129 for (
int channel = 0; channel < buffer.getNumChannels(); ++channel)
130 samples.copyFrom (channel, 0, buffer.getReadPointer (channel, start1), size1);
132 for (
int channel = 0; channel < buffer.getNumChannels(); ++channel)
133 samples.copyFrom (channel, size1, buffer.getReadPointer (channel, start2), size2);
134 finishedRead (size1 + size2);
138 void readFromFifo (
const juce::AudioSourceChannelInfo& info,
int numSamples=-1)
140 const int readSamples = numSamples > 0 ? numSamples : info.numSamples;
141 jassert (getNumReady() >= readSamples);
143 int start1, size1, start2, size2;
144 prepareToRead (readSamples, start1, size1, start2, size2);
146 for (
int channel = 0; channel < info.buffer->getNumChannels(); ++channel)
147 info.buffer->copyFrom (channel, info.startSample, buffer.getReadPointer (channel, start1), size1);
149 for (
int channel = 0; channel < info.buffer->getNumChannels(); ++channel)
150 info.buffer->copyFrom (channel, info.startSample + size1, buffer.getReadPointer (channel, start2), size2);
151 finishedRead (size1 + size2);
156 return buffer.getNumChannels();
167 juce::AudioBuffer<FloatType> buffer;
int getNumChannels() const
Definition: filmstro_audiohelpers_AudioBufferFIFO.h:155
void readFromFifo(FloatType **samples, int numSamples)
Definition: filmstro_audiohelpers_AudioBufferFIFO.h:102
void readFromFifo(const juce::AudioSourceChannelInfo &info, int numSamples=-1)
Definition: filmstro_audiohelpers_AudioBufferFIFO.h:138
void readFromFifo(juce::AudioBuffer< FloatType > &samples, int numSamples=-1)
Definition: filmstro_audiohelpers_AudioBufferFIFO.h:121
The AudioBufferFIFO implements an actual sample buffer using JUCEs AbstractFIFO class.
Definition: filmstro_audiohelpers_AudioBufferFIFO.h:50
AudioBufferFIFO(int channels, int buffersize)
Definition: filmstro_audiohelpers_AudioBufferFIFO.h:54
void clear()
Definition: filmstro_audiohelpers_AudioBufferFIFO.h:160
void setSize(const int channels, const int newBufferSize)
Definition: filmstro_audiohelpers_AudioBufferFIFO.h:61
void addToFifo(const FloatType **samples, int numSamples)
Definition: filmstro_audiohelpers_AudioBufferFIFO.h:69
void addToFifo(const juce::AudioBuffer< FloatType > &samples, int numSamples=-1)
Definition: filmstro_audiohelpers_AudioBufferFIFO.h:84