diff --git a/include/FileLoop.h b/include/FileLoop.h index b2f89af..c9950e2 100644 --- a/include/FileLoop.h +++ b/include/FileLoop.h @@ -140,17 +140,15 @@ class FileLoop : protected FileWvIn */ StkFloat tick( unsigned int channel = 0 ); - //! Fill the StkFrames argument with computed frames and return the same reference. + //! Fill the StkFrames object with computed sample frames, starting at the specified channel and return the same reference. /*! - The number of channels in the StkFrames argument should equal - the number of channels in the file data. However, this is only - checked if _STK_DEBUG_ is defined during compilation, in which - case an incompatibility will trigger an StkError exception. If no - file data is loaded, the function does nothing (a warning will be - issued if _STK_DEBUG_ is defined during compilation and - Stk::showWarnings() has been set to \e true). + The \c channel argument plus the number of output channels must + be less than the number of channels in the StkFrames argument (the + first channel is specified by 0). However, range checking is only + performed if _STK_DEBUG_ is defined during compilation, in which + case an out-of-range value will trigger an StkError exception. */ - StkFrames& tick( StkFrames& frames ); + virtual StkFrames& tick( StkFrames& frames,unsigned int channel = 0 ); protected: diff --git a/include/FileWvIn.h b/include/FileWvIn.h index 0e0d534..c05495b 100644 --- a/include/FileWvIn.h +++ b/include/FileWvIn.h @@ -150,16 +150,15 @@ public: */ virtual StkFloat tick( unsigned int channel = 0 ); - //! Fill the StkFrames argument with computed frames and return the same reference. + //! Fill the StkFrames object with computed sample frames, starting at the specified channel and return the same reference. /*! - The number of channels in the StkFrames argument must equal - the number of channels in the file data. However, this is only - checked if _STK_DEBUG_ is defined during compilation, in which - case an incompatibility will trigger an StkError exception. If no - file data is loaded, the function does nothing (a warning will be - issued if _STK_DEBUG_ is defined during compilation). + The \c channel argument plus the number of output channels must + be less than the number of channels in the StkFrames argument (the + first channel is specified by 0). However, range checking is only + performed if _STK_DEBUG_ is defined during compilation, in which + case an out-of-range value will trigger an StkError exception. */ - virtual StkFrames& tick( StkFrames& frames ); + virtual StkFrames& tick( StkFrames& frames,unsigned int channel = 0 ); protected: diff --git a/include/WvIn.h b/include/WvIn.h index c5d957f..ae18246 100644 --- a/include/WvIn.h +++ b/include/WvIn.h @@ -31,8 +31,8 @@ public: //! Compute one sample frame and return the specified \c channel value. virtual StkFloat tick( unsigned int channel = 0 ) = 0; - //! Fill the StkFrames argument with computed frames and return the same reference. - virtual StkFrames& tick( StkFrames& frames ) = 0; + //! Fill the StkFrames object with computed sample frames, starting at the specified channel and return the same reference. + virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ) = 0; protected: diff --git a/src/FileLoop.cpp b/src/FileLoop.cpp index 81c5c36..cc34b6b 100644 --- a/src/FileLoop.cpp +++ b/src/FileLoop.cpp @@ -193,32 +193,39 @@ StkFloat FileLoop :: tick( unsigned int channel ) return lastFrame_[channel]; } -StkFrames& FileLoop :: tick( StkFrames& frames ) +StkFrames& FileLoop :: tick( StkFrames& frames, unsigned int channel) { if ( !file_.isOpen() ) { #if defined(_STK_DEBUG_) oStream_ << "FileLoop::tick(): no file data is loaded!"; - handleError( StkError::WARNING ); + handleError( StkError::DEBUG_PRINT ); #endif - return frames; + return frames; } - + unsigned int nChannels = lastFrame_.channels(); #if defined(_STK_DEBUG_) - if ( nChannels != frames.channels() ) { - oStream_ << "FileLoop::tick(): StkFrames argument is incompatible with file data!"; + if ( channel > frames.channels() - nChannels ) { + oStream_ << "FileLoop::tick(): channel and StkFrames arguments are incompatible!"; handleError( StkError::FUNCTION_ARGUMENT ); } #endif - - unsigned int j, counter = 0; - for ( unsigned int i=0; itick(); - for ( j=0; j frames.channels() - nChannels ) { + oStream_ << "FileWvIn::tick(): channel and StkFrames arguments are incompatible!"; handleError( StkError::FUNCTION_ARGUMENT ); } #endif - - unsigned int j, counter = 0; - for ( unsigned int i=0; itick(); - for ( j=0; j