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 system.
// rtsine.cpp #include "WaveLoop.h" #include "RtWvOut.h" int main() { // Set the global sample rate before creating class instances. Stk::setSampleRate( 44100.0 ); WaveLoop *input = 0; RtWvOut *output = 0; try { // Define and load the sine wave file input = new WaveLoop( "rawwaves/sinewave.raw", TRUE ); // Define and open the default realtime output device for one-channel playback output = new RtWvOut(1); } catch (StkError &) { goto cleanup; } input->setFrequency(440.0); // Play the oscillator for 40000 samples int i; for ( i=0; i<40000; i++ ) { try { output->tick(input->tick()); } catch (StkError &) { goto cleanup; } } cleanup: delete input; delete output; 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.
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 is 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/MIDI 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 -lstk
On a Macintosh OS X system, the syntax would be:
CC -D__MACOSX_CORE__ -o rtsine Stk.cpp WvIn.cpp WaveLoop.cpp WvOut.cpp RtWvOut.cpp RtAudio.cpp \ rtsine.cpp -lpthread -lstdc++ -lstk -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. |