mirror of
https://github.com/thestk/stk
synced 2026-01-11 12:01:52 +00:00
82 lines
3.3 KiB
Plaintext
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>] [<A HREF="compile.html">Next tutorial</A>]
|
|
*/
|