diff --git a/include/SoundTouch.h b/include/SoundTouch.h index 7045209..f929299 100644 --- a/include/SoundTouch.h +++ b/include/SoundTouch.h @@ -306,6 +306,15 @@ public: virtual uint receiveSamples(uint maxSamples ///< Remove this many samples from the beginning of pipe. ) override; + /// Returns a pointer to the beginning of the output samples. + /// This function is provided for accessing the output samples directly. + /// Please be careful for not to corrupt the book-keeping! + /// + /// When using this function to output samples, also remember to 'remove' the + /// output samples from the buffer by calling the + /// 'receiveSamples(numSamples)' function + SAMPLETYPE *bufBegin(); + /// Clears all the samples in the object's output and internal processing /// buffers. virtual void clear() override; diff --git a/source/SoundTouch/SoundTouch.cpp b/source/SoundTouch/SoundTouch.cpp index 0eda80a..a496eb9 100644 --- a/source/SoundTouch/SoundTouch.cpp +++ b/source/SoundTouch/SoundTouch.cpp @@ -528,6 +528,17 @@ uint SoundTouch::receiveSamples(uint maxSamples) return ret; } +// Returns a pointer to the beginning of the currently non-outputted samples. +// This function is provided for accessing the output samples directly. +// Please be careful! +// +// When using this function to output samples, also remember to 'remove' the +// outputted samples from the buffer by calling the +// 'receiveSamples(numSamples)' function +SAMPLETYPE *SoundTouch::bufBegin() +{ + return pTDStretch->getOutput()->ptrBegin(); +} /// Get ratio between input and output audio durations, useful for calculating /// processed output duration: if you'll process a stream of N samples, then