Home Information Classes Download Usage Mail List Requirements Links FAQ Tutorial
Most STK classes process single-sample data streams via their tick()
function. For classes supporting multi-channel data, one must distinguish the tick()
functions taking or producing single StkFloat
arguments from those taking stk::StkFrames& arguments. If a single-sample version of the tick()
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 tick()
function is called for subclasses of WvOut, the sample argument is written to all channels in the one computed frame. For classes returning values, an optional 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 tick()
functions taking StkFrames reference arguments should be used.
Multi-channel support for realtime audio input and output is dependent on the audio device(s) available on your system.
The following example demonstrates the use of the stk::FileWvOut class for creating a four channel, 16-bit AIFF formatted audio file. We will use four sinewaves of different frequencies for the first two seconds and then a single sinewave for the last two seconds.
// foursine.cpp STK tutorial program #include "SineWave.h" #include "FileWvOut.h" using namespace stk; int main() { // Set the global sample rate before creating class instances. Stk::setSampleRate( 44100.0 ); int i; FileWvOut output; SineWave inputs[4]; // Set the sine wave frequencies. for ( i=0; i<4; i++ ) inputs[i].setFrequency( 220.0 * (i+1) ); // Define and open a 16-bit, four-channel AIFF formatted output file try { output.openFile( "foursine.aif", 4, FileWrite::FILE_AIF, Stk::STK_SINT16 ); } catch (StkError &) { exit( 1 ); } // Write two seconds of four sines to the output file StkFrames frames( 88200, 4 ); for ( i=0; i<4; i++ ) inputs[i].tick( frames, i ); output.tick( frames ); // Now write the first sine to all four channels for two seconds for ( i=0; i<88200; i++ ) { output.tick( inputs[0].tick() ); } return 0; }
The Synthesis ToolKit in C++ (STK) |
©1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved. |