10 : AudioBuffer<float>(buffer)
12 AudioBuffer<float>::setSize(numOfChannels, getNumSamples(),
false,
true,
false);
22 return AudioBuffer<float>::getRMSLevel(channel,
START_SAMPLE, getNumSamples());
26 bool avoidReallocating)
28 AudioBuffer<float>::setSize(newNumChannels, numSamples, keepExistingContent, clearExtraSpace,
34 setSize(prototypeBuffer.getNumChannels(), prototypeBuffer.getNumSamples());
40 for (
int i = 0; i < getNumChannels(); ++i)
42 for (
int sample = 0; sample < getNumSamples(); ++sample)
44 getWritePointer(i)[sample] = (randomNumber.nextFloat() - 0.5f) * 2;
54 float startValue = 0.0f;
55 float increment = 1.0f /
static_cast<float>(getNumSamples());
60 increment = -increment;
63 for (
int i = 0; i < getNumChannels(); ++i)
65 float attenuation = startValue;
66 for (
int sample = 0; sample < getNumSamples(); ++sample)
68 getWritePointer(i)[sample] *= attenuation;
69 attenuation += increment;
76 AudioBuffer<float> mono{1, this->getNumSamples()};
78 for (
int sourceChannel = 0; sourceChannel < this->getNumChannels(); sourceChannel++)
80 mono.addFrom(0, 0, this->
getJuceAudioBuffer(), sourceChannel, 0, this->getNumSamples(),
81 1.0f / this->getNumChannels());
95 AudioBuffer<float>::copyFrom(destChannel,
START_SAMPLE, source, numSamples);
101 jassert(getNumSamples() == sourceBuffer.getNumSamples());
102 jassert((getNumChannels() == sourceBuffer.getNumChannels()) || (sourceBuffer.getNumChannels() == 1));
104 if (sourceBuffer.getNumChannels() == 1)
106 for (
int i = 0; i < getNumChannels(); ++i)
108 copyFrom(i, sourceBuffer.getReadPointer(0), getNumSamples());
113 for (
int i = 0; i < getNumChannels(); ++i)
115 copyFrom(i, sourceBuffer.getReadPointer(i), getNumSamples());
124 AudioBuffer<float>::addFrom(destChannel,
START_SAMPLE, source, numSamples);
133 jassert(getNumSamples() == srcBuffer.getNumSamples());
134 jassert((getNumChannels() == srcBuffer.getNumChannels()) || (srcBuffer.getNumChannels() == 1));
136 if (srcBuffer.getNumChannels() == 1)
138 for (
int channel = 0; channel < getNumChannels(); ++channel)
141 const float* sourceSamples = srcBuffer.getReadPointer(0);
142 AudioBuffer<float>::addFrom(channel,
START_SAMPLE, sourceSamples, srcBuffer.getNumSamples());
147 for (
int channel = 0; channel < getNumChannels(); ++channel)
149 const float* sourceSamples = srcBuffer.getReadPointer(channel);
150 AudioBuffer<float>::addFrom(channel,
START_SAMPLE, sourceSamples, srcBuffer.getNumSamples());
160 for (
int sample = 0; sample < getNumSamples(); ++sample)
163 float dryFactor = 1.0f - wetFactor;
164 for (
int channel = 0; channel < getNumChannels(); ++channel)
166 const float* sourceSamples = wetBuffer.getReadPointer(channel);
167 getWritePointer(channel)[sample] =
168 getReadPointer(channel)[sample] * wetFactor + sourceSamples[sample] * dryFactor;
175 for (
int sample = 0; sample < getNumSamples(); ++sample)
178 for (
int channel = 0; channel < getNumChannels(); ++channel)
180 getWritePointer(channel)[sample] *= gain;
187 bool wasClamped =
false;
188 for (
int channel = 0; channel < getNumChannels(); ++channel)
190 for (
int sample = 0; sample < getNumSamples(); ++sample)
192 float val = getReadPointer(channel)[sample];
193 if (val > clampValue)
198 else if (val < -clampValue)
203 getWritePointer(channel)[sample] = val;
213 for (
int sample = 0; sample < getNumSamples(); ++sample)
215 for (
int channel = 0; channel < getNumChannels(); ++channel)
217 getWritePointer(channel)[sample] *= gainFactor;
226 if (getNumChannels() == 2)
228 for (
int sample = 0; sample < getNumSamples(); ++sample)
231 float gainFactorR = 2.0f - gainFactorL;
232 getWritePointer(0)[sample] *= gainFactorR;
233 getWritePointer(1)[sample] *= gainFactorL;
259 bool isStereo =
false;
260 if (getNumChannels() > 1)
262 float scaling = 1.0f;
263 float increment = scaling / samples;
264 float* dataLeftChan = getWritePointer(0);
265 float* dataRightChan = dataLeftChan;
269 dataRightChan = getWritePointer(1);
272 for (
int i = 0; i < getNumSamples(); i++)
274 dataLeftChan[i] = startValue.
left * scaling;
277 dataRightChan[i] = startValue.
right * scaling;
279 scaling -= increment;
285 retVal.
left = startValue.
left * scaling;
299 const float* dataLeftChan = getReadPointer(0);
300 const float* dataRightChan = dataLeftChan;
302 if (getNumChannels() > 1)
304 dataRightChan = getReadPointer(1);
307 retVal.
left = dataLeftChan[getNumSamples() - 1];
308 retVal.
right = dataRightChan[getNumSamples() - 1];
327 else if (index >=
double(getNumSamples()))
329 index = double(getNumSamples()) - 1.0;
332 int integerPosition = (int)floor(index);
333 if (integerPosition >= getNumSamples() - 1 || integerPosition < 0)
339 const float* dataLeftChan = getReadPointer(0);
340 const float* dataRightChan = dataLeftChan;
342 if (getNumChannels() > 1)
344 dataRightChan = getReadPointer(1);
351 float alpha = float(index -
double(integerPosition));
352 auto invAlpha = 1.0f - alpha;
353 retVal.
left = dataLeftChan[integerPosition] * invAlpha + dataLeftChan[integerPosition + 1] * alpha;
354 retVal.
right = dataRightChan[integerPosition] * invAlpha + dataRightChan[integerPosition + 1] * alpha;
390 int index =
static_cast<int>(floor(playhead));
391 double mu = playhead -
static_cast<double>(index);
393 int sampleIndex2 = index + 1;
394 if (sampleIndex2 >= getNumSamples())
396 sampleIndex2 = getNumSamples() - 1;
399 float y1 = buffer[index];
400 float y2 = buffer[sampleIndex2];
402 int sampleIndex0 = index - 1;
403 if (sampleIndex0 < 0)
405 int sampleIndex3 = sampleIndex2 + 1;
406 if (sampleIndex3 >= getNumSamples())
408 sampleIndex3 = getNumSamples() - 1;
410 float y0 = buffer[sampleIndex0];
411 float y3 = buffer[sampleIndex3];
412 double mu2 = mu * mu;
414 float a0 = -0.5f * y0 + 1.5f * y1 - 1.5f * y2 + 0.5f * y3;
415 float a1 = y0 - 2.5f * y1 + 2 * y2 - 0.5f * y3;
416 float a2 = -0.5f * y0 + 0.5f * y2;
418 return static_cast<float>(a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3);
424 int index =
static_cast<int>(floor(playhead));
425 double mu = playhead -
static_cast<double>(index);
427 int sampleIndex2 = index + 1;
428 if (sampleIndex2 >= getNumSamples())
430 sampleIndex2 = getNumSamples() - 1;
432 float y1 = buffer[index];
433 float y2 = buffer[sampleIndex2];
435 float mu2 = (1.0f - cosf(
static_cast<float>(mu) * juce::MathConstants<float>::pi)) / 2;
436 return y1 * (1.0f - mu2) + y2 * mu2;
442 int y1index =
static_cast<int>(floor(playhead));
443 int y2index =
static_cast<int>(ceil(playhead));
445 if (y1index == y2index)
447 return buffer[y1index];
450 jassert(y1index >= 0);
451 jassert(y2index <= getNumSamples());
453 jassert((playhead != 0.0) && (y1index != y2index));
455 int y0index = y1index - 1;
456 int y3index = y2index + 1;
458 double mu = playhead - y1index;
460 jassert((mu >= 0) && (mu <= 1));
467 if (y2index >= getNumSamples())
469 y2index = getNumSamples() - 1;
470 y3index = getNumSamples() - 1;
473 else if (y3index >= getNumSamples())
475 y3index = getNumSamples() - 1;
478 jassert(y0index >= 0);
479 jassert(y1index >= 0);
480 jassert(y2index >= 0);
481 jassert(y3index >= 0);
483 jassert(y0index < getNumSamples());
484 jassert(y1index < getNumSamples());
485 jassert(y2index < getNumSamples());
486 jassert(y3index < getNumSamples());
488 double y0 = buffer[y0index];
489 double y1 = buffer[y1index];
490 double y2 = buffer[y2index];
491 double y3 = buffer[y3index];
493 double a0, a1, a2, a3, mu2;
496 a0 = y3 - y2 - y0 + y1;
501 return (
static_cast<float>(a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3));
521 std::reverse(getWritePointer(channel) + startSample, getWritePointer(channel) + startSample + numSamples);
527 for (
int i = 0; i < getNumChannels(); ++i)
529 reverse(i, startSample, numSamples);
535 return dynamic_cast<AudioBuffer<float>&
>(*this);
540 for (
int channel = 0; channel < previousBuffer.getNumChannels(); channel++)
542 auto channelData = previousBuffer.getReadPointer(channel);
543 auto numOfSamples = previousBuffer.getNumSamples();
545 float multiplier = -1.0f;
546 const float increment = 2.0f / numOfSamples;
547 for (
int i = 0; i < numOfSamples; i++)
549 const float newSample = (sqrt(0.5f * (1.f - multiplier)) * channelData[i]) +
550 (sqrt(0.5f * (1.f + multiplier)) * getReadPointer(channel)[i]);
551 getWritePointer(channel)[i] = newSample;
552 multiplier += increment;
560 for (
int channel = 0; channel < getNumChannels(); channel++)
562 Range<float> range = findMinMax(channel, 0, getNumSamples());
563 if (fabs(range.getStart()) > maxVal)
564 maxVal = fabs(range.getStart());
565 if (fabs(range.getEnd()) > maxVal)
566 maxVal = fabs(range.getEnd());
Definition KrotosAudioBuffer.h:111
~KrotosAudioBuffer()
Definition KrotosAudioBuffer.cpp:16
float getRMS(int channel) const
Definition KrotosAudioBuffer.cpp:20
void setInterpolationType(InterpolationType newInterpolationType)
Definition KrotosAudioBuffer.cpp:246
juce::AudioBuffer< float > & getJuceAudioBuffer()
Definition KrotosAudioBuffer.cpp:533
StereoSample getLastSample()
Get the last stereo sample from the audio buffer.
Definition KrotosAudioBuffer.cpp:295
void processMute(MuteStateMachine &state)
Definition KrotosAudioBuffer.cpp:49
static const float FREQ_Hz_NOTE_D3
Definition KrotosAudioBuffer.h:219
float getCosineInterpolationSample(double playhead, const float *buffer)
Definition KrotosAudioBuffer.cpp:421
void processPan(SmoothedFloat &panValue)
Definition KrotosAudioBuffer.cpp:222
static const float FREQ_Hz_NOTE_C4
Definition KrotosAudioBuffer.h:220
float getSourceSampleRate(void)
Definition KrotosAudioBuffer.cpp:510
float getSampleRate(void)
Definition KrotosAudioBuffer.cpp:506
bool processClamp(float clampValue)
Definition KrotosAudioBuffer.cpp:185
float getCubic3dInterpolationSample(double playhead, const float *buffer)
Definition KrotosAudioBuffer.cpp:387
StereoSample getInterpolatedSample(double index)
Get a stereo sample from the audio buffer.
Definition KrotosAudioBuffer.cpp:318
void equalPowerCrossFadeFrom(const KrotosAudioBuffer &previousBuffer)
Definition KrotosAudioBuffer.cpp:538
float getInterpolatedSampleMono(float playHead)
Definition KrotosAudioBuffer.cpp:381
KrotosAudioBuffer getMonoBuffer()
Definition KrotosAudioBuffer.cpp:74
static const float FREQ_Hz_NOTE_C3
Definition KrotosAudioBuffer.h:218
float getCubicInterpolationSample(double playhead, const float *buffer)
Definition KrotosAudioBuffer.cpp:439
KrotosAudioBuffer()
Definition KrotosAudioBuffer.cpp:7
void processWetDry(KrotosAudioBuffer &wetBuffer, SmoothedFloat &wetDryValue)
Definition KrotosAudioBuffer.cpp:155
void fillWithNoise()
Definition KrotosAudioBuffer.cpp:37
float m_sampleRate
Definition KrotosAudioBuffer.h:213
void setSize(int newNumChannels, int numSamples, bool keepExistingContent=true, bool clearExtraSpace=true, bool avoidReallocating=true)
Definition KrotosAudioBuffer.cpp:25
void copyFrom(int destChannel, const float *source, int numSamples)
Definition KrotosAudioBuffer.cpp:93
void setSampleRate(float sampleRate)
Definition KrotosAudioBuffer.cpp:504
bool isDataValid() const
Definition KrotosAudioBuffer.cpp:244
void reverse(int channel, int startSample, int numSamples)
Definition KrotosAudioBuffer.cpp:519
InterpolationType m_interpoltationType
Definition KrotosAudioBuffer.h:212
void normaliseTo(float scale)
Definition KrotosAudioBuffer.cpp:571
StereoSample makeRamp(StereoSample startValue, int samples)
Create a ramp in the buffer.
Definition KrotosAudioBuffer.cpp:257
float findAbsMax()
Definition KrotosAudioBuffer.cpp:557
float getNativeNoteFrequency(void)
Definition KrotosAudioBuffer.cpp:512
InterpolationType
Definition KrotosAudioBuffer.h:120
@ NUM_TYPES
Definition KrotosAudioBuffer.h:125
@ Cosine
Definition KrotosAudioBuffer.h:123
@ Cubic3d
Definition KrotosAudioBuffer.h:124
@ Cubic
Definition KrotosAudioBuffer.h:122
@ Linear
Definition KrotosAudioBuffer.h:121
void setSourceSampleRate(float sampleRate)
Definition KrotosAudioBuffer.cpp:508
float m_sourceSampleRate
Definition KrotosAudioBuffer.h:214
float getPeak(int channel) const
Definition KrotosAudioBuffer.cpp:18
void setDataValid(bool state)
Definition KrotosAudioBuffer.cpp:91
void processGain(SmoothedFloat &gainFactor)
Definition KrotosAudioBuffer.cpp:173
void addFrom(int destChannel, const float *source, int numSamples)
Definition KrotosAudioBuffer.cpp:122
static KrotosAudioBuffer mixToMono(KrotosAudioBuffer &multiChannelBuffer)
Definition KrotosAudioBuffer.cpp:87
bool m_isDataValid
Definition KrotosAudioBuffer.h:210
Definition MuteStateMachine.h:6
bool isRampingDown()
Definition MuteStateMachine.h:61
bool isNotRamping()
Definition MuteStateMachine.h:56
Definition SmoothedFloat.h:6
float getSmoothedValue()
increments the value by the required increment and gets smootedValue
Definition SmoothedFloat.cpp:5
Definition KrotosAudioBuffer.h:16
float left
Definition KrotosAudioBuffer.h:107
float right
Definition KrotosAudioBuffer.h:107
Definition AirAbsorptionFilter.cpp:2
static const int START_SAMPLE
Definition KrotosAudioBuffer.cpp:5