26#ifndef WATER_AUDIOSAMPLEBUFFER_H_INCLUDED
27#define WATER_AUDIOSAMPLEBUFFER_H_INCLUDED
31#include "CarlaMathUtils.hpp"
68 const bool clearData =
false)
noexcept
70 size(numSamplesToAllocate),
245 return channels [channelNumber] + sampleIndex;
274 return channels [channelNumber] + sampleIndex;
300 const uint32_t allocatedSamplesPerChannel = (newNumSamples + 3) & ~3u;
301 const uint32_t channelListSize = ((
sizeof (
float*) * (newNumChannels + 1)) + 15) & ~15u;
302 const size_t newTotalBytes = newNumChannels * allocatedSamplesPerChannel *
sizeof(float) + channelListSize + 32u;
316 float* chan =
reinterpret_cast<float*
> (
allocatedData + channelListSize);
320 chan += allocatedSamplesPerChannel;
323 channels [newNumChannels] =
nullptr;
324 size = newNumSamples;
338 if (newNumSamples !=
size)
340 const uint32_t allocatedSamplesPerChannel = (newNumSamples + 3) & ~3u;
342 const size_t newTotalBytes =
numChannels * allocatedSamplesPerChannel *
sizeof(float) + channelListSize + 32u;
346 float* chan =
reinterpret_cast<float*
> (
allocatedData + channelListSize);
350 chan += allocatedSamplesPerChannel;
353 size = newNumSamples;
379 const uint32_t newNumSamples)
noexcept
390 size = newNumSamples;
420 if (startSample == 0 && numSamples ==
size)
424 carla_zeroFloats (
channels[
i] + startSample, numSamples);
441 carla_zeroFloats (
channels [channel] + startSample, numSamples);
472 const float gainToApplyToSource = 1.0f)
noexcept
480 if (carla_isNotZero(gainToApplyToSource) && numSamples != 0 && ! source.
isClear)
482 float*
const d =
channels [destChannel] + destStartSample;
483 const float*
const s = source.
channels [sourceChannel] + sourceStartSample;
489 if (carla_isNotZero(gainToApplyToSource - 1.0f))
490 carla_copyWithMultiply (
d,
s, gainToApplyToSource, numSamples);
492 carla_copyFloats (
d,
s, numSamples);
496 if (carla_isNotZero(gainToApplyToSource - 1.0f))
497 carla_addWithMultiply (
d,
s, gainToApplyToSource, numSamples);
499 carla_add (
d,
s, numSamples);
520 float gainToApplyToSource = 1.0f)
noexcept
526 if (carla_isNotZero(gainToApplyToSource) && numSamples != 0)
528 float*
const d =
channels [destChannel] + destStartSample;
534 if (carla_isNotZero(gainToApplyToSource - 1.0f))
535 carla_copyWithMultiply (
d, source, gainToApplyToSource, numSamples);
537 carla_copyFloats (
d, source, numSamples);
541 if (carla_isNotZero(gainToApplyToSource - 1.0f))
542 carla_addWithMultiply (
d, source, gainToApplyToSource, numSamples);
544 carla_add (
d, source, numSamples);
578 carla_zeroFloats (
channels [destChannel] + destStartSample, numSamples);
583 carla_copyFloats (
channels [destChannel] + destStartSample,
584 source.channels [sourceChannel] + sourceStartSample,
611 carla_copyFloats (
channels [destChannel] + destStartSample, source, numSamples);
637 float*
const d =
channels [destChannel] + destStartSample;
639 if (carla_isZero(gain))
642 carla_zeroFloats (
d, numSamples);
644 else if (carla_isZero(gain - 1.0f))
647 carla_copyFloats (
d, source, numSamples);
652 carla_copyWithMultiply (
d, source, gain, numSamples);
668 const uint32_t totalNumSamples)
noexcept
696 const size_t channelListSize =
sizeof (
float*) * (
numChannels + 1);
697 const size_t nextAllocatedBytes =
numChannels *
size *
sizeof (float) + channelListSize + 32;
#define CARLA_SAFE_ASSERT_CONTINUE(cond)
Definition CarlaDefines.h:189
#define CARLA_SAFE_ASSERT_RETURN(cond, ret)
Definition CarlaDefines.h:190
#define CARLA_SAFE_ASSERT_UINT2_RETURN(cond, v1, v2, ret)
Definition CarlaDefines.h:215
#define noexcept
Definition DistrhoDefines.h:72
AudioSampleBuffer() noexcept
Definition AudioSampleBuffer.h:46
AudioSampleBuffer & operator=(const AudioSampleBuffer &other) noexcept
Definition AudioSampleBuffer.h:175
uint32_t size
Definition AudioSampleBuffer.h:687
bool hasBeenCleared() const noexcept
Definition AudioSampleBuffer.h:450
uint32_t getNumSamples() const noexcept
Definition AudioSampleBuffer.h:217
uint32_t getNumChannels() const noexcept
Definition AudioSampleBuffer.h:212
bool allocateChannels(float *const *const dataToReferTo, const uint32_t offset)
Definition AudioSampleBuffer.h:715
void addFrom(const uint32_t destChannel, const uint32_t destStartSample, const float *source, const uint32_t numSamples, float gainToApplyToSource=1.0f) noexcept
Definition AudioSampleBuffer.h:516
float ** channels
Definition AudioSampleBuffer.h:689
void addFrom(const uint32_t destChannel, const uint32_t destStartSample, const AudioSampleBuffer &source, const uint32_t sourceChannel, const uint32_t sourceStartSample, const uint32_t numSamples, const float gainToApplyToSource=1.0f) noexcept
Definition AudioSampleBuffer.h:466
bool setSize(const uint32_t newNumChannels, const uint32_t newNumSamples) noexcept
Definition AudioSampleBuffer.h:296
void clear(const uint32_t channel, const uint32_t startSample, const uint32_t numSamples) noexcept
Definition AudioSampleBuffer.h:433
void copyFrom(const uint32_t destChannel, const uint32_t destStartSample, const float *source, const uint32_t numSamples, float gain) noexcept
Definition AudioSampleBuffer.h:625
AudioSampleBuffer(float *const *dataToReferTo, const uint32_t numChannelsToUse, const uint32_t numSamples) noexcept
Definition AudioSampleBuffer.h:94
AudioSampleBuffer() noexcept
Definition AudioSampleBuffer.h:46
const float * getReadPointer(const uint32_t channelNumber, const uint32_t sampleIndex) const noexcept
Definition AudioSampleBuffer.h:240
bool setSizeRT(const uint32_t newNumSamples) noexcept
Definition AudioSampleBuffer.h:336
float ** getArrayOfWritePointers() noexcept
Definition AudioSampleBuffer.h:289
uint32_t numChannels
Definition AudioSampleBuffer.h:687
bool isClear
Definition AudioSampleBuffer.h:692
AudioSampleBuffer(float *const *dataToReferTo, const uint32_t numChannelsToUse, const uint32_t startSample, const uint32_t numSamples) noexcept
Definition AudioSampleBuffer.h:125
~AudioSampleBuffer() noexcept
Definition AudioSampleBuffer.h:206
void copyFrom(const uint32_t destChannel, const uint32_t destStartSample, const AudioSampleBuffer &source, const uint32_t sourceChannel, const uint32_t sourceStartSample, const uint32_t numSamples) noexcept
Definition AudioSampleBuffer.h:560
HeapBlock< char > allocatedData
Definition AudioSampleBuffer.h:690
bool allocateData(bool clearData=false)
Definition AudioSampleBuffer.h:694
float * preallocatedChannelSpace[32]
Definition AudioSampleBuffer.h:691
size_t allocatedBytes
Definition AudioSampleBuffer.h:688
bool setDataToReferTo(float **dataToReferTo, const uint32_t newNumChannels, const uint32_t newNumSamples) noexcept
Definition AudioSampleBuffer.h:377
float * getWritePointer(const uint32_t channelNumber) noexcept
Definition AudioSampleBuffer.h:254
void copyFromInterleavedSource(const uint32_t destChannel, const float *source, const uint32_t totalNumSamples) noexcept
Definition AudioSampleBuffer.h:666
void copyFrom(const uint32_t destChannel, const uint32_t destStartSample, const float *source, const uint32_t numSamples) noexcept
Definition AudioSampleBuffer.h:599
float * getWritePointer(const uint32_t channelNumber, const uint32_t sampleIndex) noexcept
Definition AudioSampleBuffer.h:268
void clear() noexcept
Definition AudioSampleBuffer.h:397
AudioSampleBuffer(const uint32_t numChannelsToAllocate, const uint32_t numSamplesToAllocate, const bool clearData=false) noexcept
Definition AudioSampleBuffer.h:66
const float * getReadPointer(const uint32_t channelNumber) const noexcept
Definition AudioSampleBuffer.h:226
const float ** getArrayOfReadPointers() const noexcept
Definition AudioSampleBuffer.h:282
AudioSampleBuffer(const AudioSampleBuffer &other) noexcept
Definition AudioSampleBuffer.h:147
void clear(const uint32_t startSample, const uint32_t numSamples) noexcept
Definition AudioSampleBuffer.h:413
Definition HeapBlock.h:77
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
unsigned int uint32_t
Definition mid.cpp:100
Definition AudioSampleBuffer.h:33
size_t numElementsInArray(Type(&array)[N])
Definition MathsFunctions.h:257
#define false
Definition ordinals.h:83
#define const
Definition zconf.h:137