Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial


WvOut.h

00001 #ifndef STK_WVOUT_H
00002 #define STK_WVOUT_H
00003 
00004 #include "Stk.h"
00005 
00006 namespace stk {
00007 
00008 /***************************************************/
00020 /***************************************************/
00021 
00022 class WvOut : public Stk
00023 {
00024  public:
00025 
00027   WvOut( void ) : frameCounter_(0), clipping_(false) {};
00028 
00030   unsigned long getFrameCount( void ) const { return frameCounter_; };
00031 
00033   StkFloat getTime( void ) const { return (StkFloat) frameCounter_ / Stk::sampleRate(); };
00034 
00036   bool clipStatus( void ) { return clipping_; };
00037 
00039   void resetClipStatus( void ) { clipping_ = false; };
00040 
00042 
00045   virtual void tick( const StkFloat sample ) = 0;
00046 
00048   virtual void tick( const StkFrames& frames ) = 0;
00049 
00050  protected:
00051 
00052   // Check for sample clipping and clamp.
00053   StkFloat& clipTest( StkFloat& sample );
00054 
00055   StkFrames data_;
00056   unsigned long frameCounter_;
00057   bool clipping_;
00058 
00059 };
00060 
00061 inline StkFloat& WvOut :: clipTest( StkFloat& sample )
00062 {
00063   bool clip = false;
00064   if ( sample > 1.0 ) {
00065     sample = 1.0;
00066     clip = true;
00067   }
00068   else if ( sample < -1.0 ) {
00069     sample = -1.0;
00070     clip = true;
00071   }
00072 
00073   if ( clip == true && clipping_ == false ) {
00074     // First occurrence of clipping since instantiation or reset.
00075     clipping_ = true;
00076     oStream_ << "WvOut: data value(s) outside +-1.0 detected ... clamping at outer bound!";
00077     handleError( StkError::WARNING );
00078   }
00079 
00080   return sample;
00081 }
00082 
00083 } // stk namespace
00084 
00085 #endif

The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.