|
- /*! \page hello Hello Sine!
-
- We'll continue our introduction to the Synthesis ToolKit with a simple
- sine-wave oscillator program. STK provides two different classes for
- sine-wave generation. We will first look at a generic waveform
- oscillator class, stk::FileLoop, that can load a variety of common file
- types. In this example, we load a sine "table" from an STK RAW file
- (defined as monophonic, 16-bit, big-endian data). We use the class
- stk::FileWvOut to write the result to a 16-bit, WAV formatted audio file.
-
- \code
-
- // sineosc.cpp
-
- #include "FileLoop.h"
- #include "FileWvOut.h"
- using namespace stk;
-
- int main()
- {
- // Set the global sample rate before creating class instances.
- Stk::setSampleRate( 44100.0 );
-
- FileLoop input;
- FileWvOut output;
-
- // Load the sine wave file.
- input.openFile( "rawwaves/sinewave.raw", true );
-
- // Open a 16-bit, one-channel WAV formatted output file
- output.openFile( "hellosine.wav", 1, FileWrite::FILE_WAV, Stk::STK_SINT16 );
-
- input.setFrequency( 440.0 );
-
- // Run the oscillator for 40000 samples, writing to the output file
- for ( int i=0; i<40000; i++ )
- output.tick( input.tick() );
-
- return 0;
- }
- \endcode
-
- stk::FileLoop is a subclass of stk::FileWvIn, which supports WAV, SND
- (AU), AIFF, MAT-file (Matlab), and RAW file formats with 8-, 16-, and
- 32-bit integer and 32- and 64-bit floating-point data types.
- stk::FileWvIn provides interpolating, read-once ("oneshot")
- functionality, as well as methods for setting the read rate and read
- position.
-
- stk::FileWvIn provides a "tick level" and interpolating interface to
- the stk::FileRead class. Likewise, stk::FileWvOut provides a "tick
- level" interface to the stk::FileWrite class. stk::FileRead and
- FileWrite both support WAV, SND(AU), AIFF, MAT-file (Matlab), and RAW
- file formats with 8-, 16-, and 32-bit integer and 32- and 64-bit
- floating-point data types. stk::FileWvOut does not currently offer
- data interpolation functionality.
-
- A number of STK parent classes, including stk::WvIn, stk::WvOut,
- stk::Instrmnt, stk::Generator, and stk::Effect, (and some or all of
- their subclasses) support multi-channel sample frames. If a
- single-sample version of the <TT>tick()</TT> function is called for
- these classes, a full sample frame is computed but only a single value
- is either input and/or output. For example, if the single-sample
- <TT>tick()</TT> function is called for subclasses of stk::WvOut, the
- sample argument is written to all channels in the one computed frame.
- For classes returning values, an optional \c channel argument
- specifies which channel value is returned from the computed frame (the
- default is always channel 0). To input and/or output multichannel data
- to these classes, the overloaded <TT>tick()</TT> functions taking
- StkFrames reference arguments should be used.
-
- Nearly all STK classes inherit from the stk::Stk base class. Stk
- provides a static sample rate that is queried by subclasses as needed.
- Because many classes use the current sample rate value during
- instantiation, it is important that the desired value be set at the
- beginning of a program. The default STK sample rate is 44100 Hz.
-
- \section error Error Handling
-
- The ToolKit has some basic C++ error handling functionality built in.
- Classes that access files and/or hardware are most prone to runtime
- errors. To properly "catch" such errors, the above example should be
- rewritten as shown below.
-
- \include sineosc.cpp
-
- In this particular case, we simply exit the program if an error occurs
- (an error message is automatically printed to stderr). A more refined
- program might attempt to recover from or fix a particular problem and,
- if successful, continue processing. See the \ref classes to determine
- which constructors and functions can throw an error.
-
- [<A HREF="fundamentals.html">Main tutorial page</A>] [<A HREF="compile.html">Next tutorial</A>]
- */
|