21#include <pluginterfaces/vst/ivstaudioprocessor.h>
33using namespace Steinberg;
34using namespace Steinberg::Vst;
45template<std::
floating_po
int SampleType>
153 if(!ptrFrom || !ptrTo)
156 std::copy(ptrFrom, ptrFrom + numSamples, ptrTo);
196 template<UnaryModifier<SampleType> F>
221 template<UnaryFunction<SampleType> F>
254 template<UnaryTransformer<SampleType> F>
258 auto inputBuffer = iFromChannel.
getBuffer();
260 if(outputBuffer && inputBuffer)
266 std::transform<decltype(inputBuffer), decltype(outputBuffer), F &>(inputBuffer, inputBuffer + numSamples, outputBuffer, f);
275 template<UnaryTransformer<SampleType> F>
278 return oToChannel.
copyFrom(*
this, f);
296 return fBuffer.numChannels == 0 ||
fBuffer.silenceFlags == (
static_cast<uint64
>(1) <<
fBuffer.numChannels) - 1;
305 uint64 silenceFlags = 0;
313 auto ptr = buffer[channel];
327 BIT_SET(silenceFlags, channel);
330 fBuffer.silenceFlags = silenceFlags;
384 return Channel{*
this, iChannel};
396 return Channel{*
const_cast<class_type *
>(
this), iChannel};
453 template<UnaryModifier<SampleType> F>
476 template<UnaryFunction<SampleType> F>
497 auto fromSamples = fromBuffer.
getBuffer();
501 if(fromSamples == toSamples)
505 if(!fromSamples || !toSamples)
511 for(int32 channel = 0; channel < numChannels; channel++)
513 auto ptrFrom = fromSamples[channel];
514 auto ptrTo = toSamples[channel];
517 if(!ptrFrom || !ptrTo)
520 std::copy(ptrFrom, ptrFrom + numSamples, ptrTo);
544 template<UnaryTransformer<SampleType> F>
549 for(int32 channel = 0; channel < numChannels; channel++)
560 template<UnaryTransformer<SampleType> F>
#define BIT_TEST(a, b)
Definition AudioUtils.h:35
#define BIT_CLEAR(a, b)
Definition AudioUtils.h:34
#define BIT_SET(a, b)
Definition AudioUtils.h:33
F forEachSample(F f)
Applies the provided unary function to each sample (if the channel is active).
Definition AudioBuffer.h:197
SampleType const * getBuffer() const
Note that this pointer is NOT guaranteed to be not null as demonstrated by this piece of logic in the...
Definition AudioBuffer.h:111
bool isActive() const
Definition AudioBuffer.h:132
bool isSilent() const
Definition AudioBuffer.h:119
void setSilenceFlag(bool iSilent)
Sets a single channel silence flag.
Definition AudioBuffer.h:124
int32 fChannel
Definition AudioBuffer.h:283
SampleType absoluteMax() const
Definition AudioBuffer.h:164
SampleType * getBuffer()
Note that this pointer is NOT guaranteed to be not null as demonstrated by this piece of logic in the...
Definition AudioBuffer.h:95
tresult copyFrom(Channel const &fromChannel)
Copy the content of the provided channel to THIS channel (up to num samples).
Definition AudioBuffer.h:145
int32 getNumSamples() const
Definition AudioBuffer.h:79
F copyFrom(Channel const &iFromChannel, F f)
Copy iFromChannel to this channel, applying f to each sample or in other words, for each sample.
Definition AudioBuffer.h:255
F copyTo(Channel &oToChannel, F f) const
Same as copyFrom with the roles reversed.
Definition AudioBuffer.h:276
AudioBuffers & fBuffers
Definition AudioBuffer.h:282
void clear()
Clears the channel (and sets the silence flag).
Definition AudioBuffer.h:171
F forEachSample(F f) const
Applies the provided unary function to each sample (if the channel is active).
Definition AudioBuffer.h:222
tresult copyTo(Channel &toChannel) const
Copy the content of THIS channel to the provided channel (up to num samples).
Definition AudioBuffer.h:140
Channel(AudioBuffers &iBuffers, int32 iChannel)
Definition AudioBuffer.h:72
Represents all the buffers (example for a stereo channel there is 2 underlying sample buffers).
Definition AudioBuffer.h:47
F copyTo(class_type &iToBuffer, F f) const
Same as copyFrom with the roles reversed.
Definition AudioBuffer.h:561
F forEachSample(F f)
Applies the provided unary function to each sample of each channel.
Definition AudioBuffer.h:454
Channel getRightChannel()
Definition AudioBuffer.h:412
AudioBusBuffers & fBuffer
Definition AudioBuffer.h:584
Channel getLeftChannel()
Definition AudioBuffer.h:402
tresult clear()
Clears the buffer (and sets the silence flag).
Definition AudioBuffer.h:573
AudioBuffers class_type
Definition AudioBuffer.h:286
Channel getAudioChannel(int32 iChannel)
Return the audio channel for the provided channel.
Definition AudioBuffer.h:382
void setSilenceFlag(int32 iChannel, bool iSilent)
Sets a single channel silence flag.
Definition AudioBuffer.h:344
bool isSilent(int32 iChannel) const
Definition AudioBuffer.h:367
uint64 getSilenceFlags() const
Definition AudioBuffer.h:336
F copyFrom(class_type const &iFromBuffer, F f)
Copy iFromBuffer to this buffer, applying f to each sample for each channel or in other words,...
Definition AudioBuffer.h:545
bool isSilent() const
Definition AudioBuffer.h:294
AudioBusBuffers const & getAudioBusBuffers() const
Returns the AudioBusBuffers original buffer (const version).
Definition AudioBuffer.h:429
AudioBusBuffers & getAudioBusBuffers()
Returns the AudioBusBuffers original buffer.
Definition AudioBuffer.h:426
SampleType absoluteMax() const
Definition AudioBuffer.h:566
tresult copyTo(class_type &toBuffer) const
Copy the content of THIS buffer to the provided buffer (up to num samples).
Definition AudioBuffer.h:490
void clearSilentFlag()
Makes the buffer NON silent (by setting the flag to 0).
Definition AudioBuffer.h:359
int32 getNumSamples() const
Definition AudioBuffer.h:439
SampleType ** getBuffer()
Returns the underlying (sample) buffer.
const int32 fNumSamples
Definition AudioBuffer.h:585
Channel getLeftChannel() const
Definition AudioBuffer.h:407
SampleType const *const * getBuffer() const
Channel getAudioChannel(int32 iChannel) const
Return the audio channel for the provided channel.
Definition AudioBuffer.h:393
Channel getRightChannel() const
Definition AudioBuffer.h:417
int32 getNumChannels() const
Definition AudioBuffer.h:434
void setSilenceFlags(uint64 iFlags)
Definition AudioBuffer.h:339
F forEachSample(F f) const
Applies the provided unary function to each sample of each channel.
Definition AudioBuffer.h:477
tresult copyFrom(class_type const &fromBuffer)
Copy the content of the provided buffer to THIS buffer (up to num samples).
Definition AudioBuffer.h:495
AudioBuffers(AudioBusBuffers &buffer, int32 numSamples)
Definition AudioBuffer.h:290
bool adjustSilenceFlags()
Computes and adjust the silence flags.
Definition AudioBuffer.h:303
Definition CircularBuffer.h:27
constexpr int32 DEFAULT_RIGHT_CHANNEL
Definition AudioBuffer.h:38
bool isSilent(Sample32 value)
Definition AudioUtils.h:64
AudioBuffers< Sample64 > AudioBuffers64
Definition AudioBuffer.h:601
constexpr int32 DEFAULT_LEFT_CHANNEL
Definition AudioBuffer.h:37
AudioBuffers< Sample32 > AudioBuffers32
Definition AudioBuffer.h:600
Unary operator adapter for computing the absolute max.
Definition AudioBuffer.h:53
SampleType fAbsoluteMax
Definition AudioBuffer.h:59
void operator()(SampleType iSample)
Definition AudioBuffer.h:54