4 : m_head(0), m_useInterpolation(
true), m_size(numSamples), m_sizeAsFloat(
static_cast<float>(numSamples)),
5 m_sizeMultiple(numSamples * BUFFER_MULTIPLE_FOR_NEG_MODULUS_CALC),
6 m_sizeMultipleAsFloat(
static_cast<float>(m_sizeMultiple))
8 m_circularDelayBuffer = std::make_unique<AudioSampleBuffer>(1, numSamples);
10 if (numSamples < sampleRate)
13 m_readPosition = float(numSamples);
18 m_readPosition = float(m_size - sampleRate);
24 m_circularDelayBuffer->clear();
29 m_circularDelayBuffer->setSize(1, numSamples);
30 m_circularDelayBuffer->clear();
43 m_readPosition = m_head - index;
44 m_readPosition = wrapFloatValue(m_readPosition);
59 float* bufferPointer = m_circularDelayBuffer->getWritePointer(0);
61 if ((m_head + numSamples) < m_size)
63 FloatVectorOperations::fill(bufferPointer + m_head, 0.0f, numSamples);
64 m_circularDelayBuffer->copyFrom(0, m_head, source, 0, 0, numSamples);
72 int numSamplesToReadToEnd = m_size - m_head;
74 int numSamplesToReadToStart = numSamples - numSamplesToReadToEnd;
76 FloatVectorOperations::fill(bufferPointer + m_head, 0.0f, numSamplesToReadToEnd);
77 FloatVectorOperations::fill(bufferPointer, 0.0f, numSamplesToReadToStart);
79 m_circularDelayBuffer->copyFrom(0, m_head, source, 0, 0, numSamplesToReadToEnd);
80 m_circularDelayBuffer->copyFrom(0, 0, source, 0, numSamplesToReadToEnd, numSamplesToReadToStart);
84 m_head = (m_head + numSamples) - m_size;
91 m_circularDelayBuffer->setSample(0, m_head, source);
97 m_head = m_head - m_size;
103 m_circularDelayBuffer->addSample(0,
static_cast<int>(wrapFloatValue(
float(indexOffset))), newSample);
108 index =
static_cast<int>(val);
109 mu = val -
static_cast<float>(
index);
115 float retVal = input -
static_cast<float>(
static_cast<int>(input));
116 jassert((retVal >= 0.0f) && (retVal <= 1.0f));
124 int sampleIndex2 = sampleIndex1.
index + 1;
125 if (sampleIndex2 >=
m_size)
129 float y1 = delayBufferData[sampleIndex1.
index];
130 float y2 = delayBufferData[sampleIndex2];
137 retVal = y1 * sampleIndex1.
nmu + y2 * sampleIndex1.
mu;
143 float mu2 = (1.0f - cosf(sampleIndex1.
mu * juce::MathConstants<float>::pi)) / 2;
144 retVal = y1 * (1.0f - mu2) + y2 * mu2;
151 int sampleIndex0 = sampleIndex1.
index - 1;
152 if (sampleIndex0 < 0)
154 int sampleIndex3 = sampleIndex2 + 1;
155 if (sampleIndex3 >=
m_size)
157 float y0 = delayBufferData[sampleIndex0];
158 float y3 = delayBufferData[sampleIndex3];
159 float mu2 = sampleIndex1.
mu * sampleIndex1.
mu;
161 float a0 = y3 - y2 - y0 + y1;
162 float a1 = y0 - y1 - a0;
165 retVal = a0 * sampleIndex1.
mu * mu2 + a1 * mu2 + a2 * sampleIndex1.
mu + a3;
171 int sampleIndex0 = sampleIndex1.
index - 1;
172 if (sampleIndex0 < 0)
174 int sampleIndex3 = sampleIndex2 + 1;
175 if (sampleIndex3 >=
m_size)
177 float y0 = delayBufferData[sampleIndex0];
178 float y3 = delayBufferData[sampleIndex3];
179 float mu2 = sampleIndex1.
mu * sampleIndex1.
mu;
181 float a0 = -0.5f * y0 + 1.5f * y1 - 1.5f * y2 + 0.5f * y3;
182 float a1 = y0 - 2.5f * y1 + 2.f * y2 - 0.5f * y3;
183 float a2 = -0.5f * y0 + 0.5f * y2;
185 retVal = a0 * sampleIndex1.
mu * mu2 + a1 * mu2 + a2 * sampleIndex1.
mu + a3;
creates and stores the fractional part of a float and its inverse
Definition AudioSampleCircularBuffer.h:17
MU(float val)
Definition AudioSampleCircularBuffer.cpp:106
float mu
Definition AudioSampleCircularBuffer.h:20
int index
Definition AudioSampleCircularBuffer.h:21
float nmu
Definition AudioSampleCircularBuffer.h:20
float getSample(float sampleToRead) noexcept
Definition AudioSampleCircularBuffer.cpp:120
void setReadPosition(float sample) noexcept
Definition AudioSampleCircularBuffer.cpp:41
std::unique_ptr< juce::AudioSampleBuffer > m_circularDelayBuffer
Definition AudioSampleCircularBuffer.h:79
InterpolationType m_interpolationType
Definition AudioSampleCircularBuffer.h:87
void copySamples(juce::AudioSampleBuffer &source, int numSamples) noexcept
Definition AudioSampleCircularBuffer.cpp:55
void fillWithZeroes()
Definition AudioSampleCircularBuffer.cpp:33
void setSize(int numSamples) noexcept
Definition AudioSampleCircularBuffer.cpp:27
@ cubic3d
Definition AudioSampleCircularBuffer.h:35
@ linear
Definition AudioSampleCircularBuffer.h:33
@ cubic
Definition AudioSampleCircularBuffer.h:32
@ cosine
Definition AudioSampleCircularBuffer.h:34
float m_readPosition
Definition AudioSampleCircularBuffer.h:77
float fract(float input)
returns the fractional part of a float
Definition AudioSampleCircularBuffer.cpp:113
float wrapFloatValue(float valueToWrap) noexcept
Definition AudioSampleCircularBuffer.h:63
AudioSampleCircularBuffer(int numSamples, long sampleRate) noexcept
Definition AudioSampleCircularBuffer.cpp:3
void incrementReadPosition() noexcept
Definition AudioSampleCircularBuffer.cpp:48
void copySample(float source) noexcept
Definition AudioSampleCircularBuffer.cpp:89
void addSample(int indexOffset, float newSample) noexcept
Definition AudioSampleCircularBuffer.cpp:101
const int m_size
Definition AudioSampleCircularBuffer.h:82
int m_head
Definition AudioSampleCircularBuffer.h:76
Definition AirAbsorptionFilter.cpp:2