Files
stk/doc/doxygen/hello.txt
Gary Scavone 2cbce2d8bd Version 4.2.1
2013-09-29 23:06:23 +02:00

82 lines
3.3 KiB
Plaintext

/*! \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, WaveLoop, 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
FileWvOut to write the result to a 16-bit, WAV formatted audio file.
\code
// sineosc.cpp
#include "WaveLoop.h"
#include "FileWvOut.h"
int main()
{
// Set the global sample rate before creating class instances.
Stk::setSampleRate( 44100.0 );
WaveLoop 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
WaveLoop is a subclass of 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. FileWvIn
provides interpolating, read-once ("oneshot") functionality, as well
as methods for setting the read rate and read position.
FileWvIn provides a "tick level" and interpolating interface to the
FileRead class. Likewise, FileWvOut provides a "tick level" interface
to the FileWrite class. 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.
FileWvOut does not currently offer data interpolation functionality.
The WvIn and WvOut parent classes and all subclasses support
multi-channel sample frames. To distinguish single-sample frame
operations from multi-channel frame operations, these classes also
implement <TT>tickFrame()</TT> functions. When a <TT>tick()</TT>
method is called for multi-channel data, frame averages are returned
or the input sample is distributed across all channels of a sample
frame.
Nearly all STK classes inherit from the Stk base class. Stk provides
a static sample rate which 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>] &nbsp; [<A HREF="compile.html">Next tutorial</A>]
*/