Home Information Classes Download Usage Mail List Requirements Links Tutorial
sineosc.cpp
program in order to send the output to the default audio playback device on your computer system.
// rtsine.cpp STK tutorial program #include "WaveLoop.h" #include "RtWvOut.h" int main() { // Set the global sample rate before creating class instances. Stk::setSampleRate( 44100.0 ); WaveLoop *sine = 0; RtWvOut *dac = 0; try { // Define and load the sine wave file sine = new WaveLoop( "rawwaves/sinewave.raw", true ); // Define and open the default realtime output device for one-channel playback dac = new RtWvOut(1); } catch (StkError &) { goto cleanup; } sine->setFrequency(440.0); // Play the oscillator for 40000 samples int i; for ( i=0; i<40000; i++ ) { try { dac->tick( sine->tick() ); } catch (StkError &) { goto cleanup; } } cleanup: delete sine; delete dac; return 0; }
The class RtWvOut is a protected subclass of WvOut. A number of optional constructor arguments can be used to fine tune its performance for a given system. RtWvOut provides a "single-sample" interface to the RtAudio class. Note that RtWvOut (as well as the RtWvIn and RtDuplex classes described below) make use of RtAudio's blocking input/output functionality. On systems which implement an inherently callback-based audio API, this blocking functionality will be less robust. An example of audio output using a callback scheme will be discussed in a subsequent tutorial section.
Though not used here, an RtWvIn class exists as well which can be used to read realtime audio data from an input device. See the record.cpp
example program in the examples
project for more information.
It may be possible to use an instance of RtWvOut and an instance of RtWvIn to simultaneously read and write realtime audio to and from a hardware device or devices. However, it is recommended to instead use a single instance of RtDuplex to achieve this behavior, in that it guarantees better synchronization between the input and output data. See the effects
project or the io.cpp
example program in the examples
project for more information.
When using any realtime STK class (RtAudio, RtWvOut, RtWvIn, RtDuplex, RtMidi, TcpWvIn, TcpWvOut, Socket, and Thread), it is necessary to specify an audio/MIDI API preprocessor definition and link with the appropriate libraries or frameworks. For example, the above program could be compiled on a Linux system using the GNU g++ compiler and the ALSA audio API as follows (assuming all necessary files exist in the project directory):
g++ -Wall -D__LINUX_ALSA__ -D__LITTLE_ENDIAN__ -o rtsine Stk.cpp WvIn.cpp WaveLoop.cpp WvOut.cpp \ RtWvOut.cpp RtAudio.cpp rtsine.cpp -lpthread -lasound
On a Macintosh OS X system, the syntax would be:
g++ -Wall -D__MACOSX_CORE__ -o rtsine Stk.cpp WvIn.cpp WaveLoop.cpp WvOut.cpp RtWvOut.cpp RtAudio.cpp \ rtsine.cpp -lpthread -framework CoreAudio -framework CoreMIDI -framework CoreFoundation
[Next tutorial] [Main tutorial page]
The Synthesis ToolKit in C++ (STK) |
©1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved. |