Mercurial > hg > apm2s
diff stk/include/RtWvOut.h @ 0:4606bd505630 tip
first import
author | Fiore Martin <f.martin@qmul.ac.uk> |
---|---|
date | Sat, 13 Jun 2015 15:08:10 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stk/include/RtWvOut.h Sat Jun 13 15:08:10 2015 +0100 @@ -0,0 +1,96 @@ +#ifndef STK_RTWVOUT_H +#define STK_RTWVOUT_H + +#include "WvOut.h" +#include "RtAudio.h" +#include "Mutex.h" + +namespace stk { + +/***************************************************/ +/*! \class RtWvOut + \brief STK realtime audio (blocking) output class. + + This class provides a simplified interface to RtAudio for realtime + audio output. It is a subclass of WvOut. This class makes use of + RtAudio's callback functionality by creating a large ring-buffer + into which data is written. This class should not be used when + low-latency is desired. + + RtWvOut supports multi-channel data in interleaved format. It is + important to distinguish the tick() method that outputs a single + sample to all channels in a sample frame from the overloaded one + that takes a reference to an StkFrames object for multi-channel + and/or multi-frame data. + + by Perry R. Cook and Gary P. Scavone, 1995--2014. +*/ +/***************************************************/ + +class RtWvOut : public WvOut +{ + public: + + //! Default constructor. + /*! + The default \e device argument value (zero) will select the + default output device on your system. The first device enumerated + by the underlying audio API is specified with a value of one. The + default buffer size of RT_BUFFER_SIZE is defined in Stk.h. An + StkError will be thrown if an error occurs duing instantiation. + */ + RtWvOut( unsigned int nChannels = 1, StkFloat sampleRate = Stk::sampleRate(), + int device = 0, int bufferFrames = RT_BUFFER_SIZE, int nBuffers = 20 ); + + //! Class destructor. + ~RtWvOut(); + + //! Start the audio output stream. + /*! + The stream is started automatically, if necessary, when a + tick() method is called. + */ + void start( void ); + + //! Stop the audio output stream. + /*! + It may be necessary to use this method to avoid undesireable + audio buffer cycling if you wish to temporarily stop audio output. + */ + void stop( void ); + + //! Output a single sample to all channels in a sample frame. + /*! + If the device is "stopped", it is "started". + */ + void tick( const StkFloat sample ); + + //! Output the StkFrames data. + /*! + If the device is "stopped", it is "started". The number of + channels in the StkFrames argument must equal the number of + channels specified during instantiation. However, this is only + checked if _STK_DEBUG_ is defined during compilation, in which + case an incompatibility will trigger an StkError exception. + */ + void tick( const StkFrames& frames ); + + // This function is not intended for general use but must be + // public for access from the audio callback function. + int readBuffer( void *buffer, unsigned int frameCount ); + + protected: + + RtAudio dac_; + Mutex mutex_; + bool stopped_; + unsigned int readIndex_; + unsigned int writeIndex_; + long framesFilled_; + unsigned int status_; // running = 0, emptying buffer = 1, finished = 2 + +}; + +} // stk namespace + +#endif