| @@ -158,7 +158,7 @@ public: | |||||
| { | { | ||||
| jassert (channel < numChannels); | jassert (channel < numChannels); | ||||
| jassert (numSamples > 0); | jassert (numSamples > 0); | ||||
| return *(channels + channel) + startSample; | |||||
| return channels[channel] + startSample; | |||||
| } | } | ||||
| /** Returns a raw pointer into one of the channels in this block. */ | /** Returns a raw pointer into one of the channels in this block. */ | ||||
| @@ -166,7 +166,7 @@ public: | |||||
| { | { | ||||
| jassert (channel < numChannels); | jassert (channel < numChannels); | ||||
| jassert (numSamples > 0); | jassert (numSamples > 0); | ||||
| return *(channels + channel) + startSample; | |||||
| return channels[channel] + startSample; | |||||
| } | } | ||||
| /** Returns an AudioBlock that represents one of the channels in this block. */ | /** Returns an AudioBlock that represents one of the channels in this block. */ | ||||
| @@ -188,6 +188,42 @@ public: | |||||
| return AudioBlock (channels + channelStart, numChannelsToUse, startSample, numSamples); | return AudioBlock (channels + channelStart, numChannelsToUse, startSample, numSamples); | ||||
| } | } | ||||
| /** Returns a sample from the buffer. | |||||
| The channel and index are not checked - they are expected to be in-range. If not, | |||||
| an assertion will be thrown, but in a release build, you're into 'undefined behaviour' | |||||
| territory. | |||||
| */ | |||||
| SampleType getSample (int channel, int sampleIndex) const noexcept | |||||
| { | |||||
| jassert (isPositiveAndBelow (channel, numChannels)); | |||||
| jassert (isPositiveAndBelow (sampleIndex, numSamples)); | |||||
| return channels[channel][startSample + sampleIndex]; | |||||
| } | |||||
| /** Modifies a sample in the buffer. | |||||
| The channel and index are not checked - they are expected to be in-range. If not, | |||||
| an assertion will be thrown, but in a release build, you're into 'undefined behaviour' | |||||
| territory. | |||||
| */ | |||||
| void setSample (int destChannel, int destSample, SampleType newValue) noexcept | |||||
| { | |||||
| jassert (isPositiveAndBelow (destChannel, numChannels)); | |||||
| jassert (isPositiveAndBelow (destSample, numSamples)); | |||||
| channels[destChannel][startSample + destSample] = newValue; | |||||
| } | |||||
| /** Adds a value to a sample in the buffer. | |||||
| The channel and index are not checked - they are expected to be in-range. If not, | |||||
| an assertion will be thrown, but in a release build, you're into 'undefined behaviour' | |||||
| territory. | |||||
| */ | |||||
| void addSample (int destChannel, int destSample, SampleType valueToAdd) noexcept | |||||
| { | |||||
| jassert (isPositiveAndBelow (destChannel, numChannels)); | |||||
| jassert (isPositiveAndBelow (destSample, numSamples)); | |||||
| channels[destChannel][startSample + destSample] += valueToAdd; | |||||
| } | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Clear the memory described by this AudioBlock. */ | /** Clear the memory described by this AudioBlock. */ | ||||
| forcedinline AudioBlock& clear() noexcept | forcedinline AudioBlock& clear() noexcept | ||||
| @@ -400,6 +436,7 @@ public: | |||||
| for (size_t ch = 0; ch < numChannels; ++ch) | for (size_t ch = 0; ch < numChannels; ++ch) | ||||
| FloatVectorOperations::multiply (channelPtr (ch), src1.channelPtr (ch), src2.channelPtr (ch), n); | FloatVectorOperations::multiply (channelPtr (ch), src1.channelPtr (ch), src2.channelPtr (ch), n); | ||||
| return *this; | return *this; | ||||
| } | } | ||||