STK: A ToolKit of Audio Synthesis Classes and Instruments in C++

By Perry R. Cook and Gary P. Scavone, 1995-2011.

STK Classes - See the HTML documentation in the html directory for complete information.


     .- Generator - (Modulate, Noise, SingWave, Envelope, ADSR, Asymp, SineWave, Blit, BlitSaw, BlitSquare, Granulate)
     |
     |- Function - (BowTable, JetTable, ReedTable)
     |
     |- FileRead, FileWrite
     |
     |- WvIn - (FileWvIn, RtWvIn, InetWvIn)
     |             |
     |          FileLoop
     |
     |- WvOut - (FileWvOut, RtWvOut, TcpWvOut)
     |
     |- Filter - (OnePole, OneZero, TwoPole, TwoZero, PoleZero, Biquad, FormSwep, Delay, DelayL, DelayA, TapDelay)
     |
     |- RtAudio, RtMidi, Socket, Thread, Mutex
     |                      |
Stk -|                  UdpSocket
     |                  TcpServer
     |                  TcpClient
     |
     |- StkFrames
     |
     |- Effect - (Echo, Chorus, PitShift, PRCRev, JCRev, NRev)
     |
     |- Voicer, Message, Skini, MidiFileIn, Phonemes, Sphere, Vector3D
     |
     |- Messager
     |
     |            .- FM - (HevyMetl, PercFlut, Rhodey, Wurley, TubeBell, BeeThree, FMVoices)
     |            |
     |            |- Modal - ModalBar
     |            |
     |            |- VoicForm
     |            |
     |            |- Sampler - Moog
     |            |
     |            |- Resonate
     |            |
     |            |- PluckedTwo - Mandolin
     .- Instrmnt -|
                  |- Drummer
                  |
                  |- Clarinet, BlowHole, Saxofony, Flute, Brass, BlowBotl, Bowed, Plucked, StifKarp, Sitar
                  |
                  |- Shakers
                  |
                  |- BandedWG
                  |
                  |- Mesh2D
                  |
                  .- Whistle


***********   UNIT GENERATORS   **************

Master Class:  Stk.cpp         Sample rate, byte-swapping, error handling functionality

Sources:       Generator.h     Abstract base class for various source signal classes
               Function.h      Abstract base class for various input/output mapping classes
               Envelope.cpp    Linearly goes to target by rate
               ADSR.cpp        ADSR envelope
               Asymp.cpp       Exponentially approaches target
               Noise.cpp       Random number generator
               SineWave.cpp    Sinusoidal oscillator with internally computed static table
               Blit.cpp        Bandlimited impulse train
               BlitSaw.cpp     Bandlimited sawtooth generator
               BlitSquare.cpp  Bandlimited square wave generator
               Granulate.cpp   Granular synthesis class that processes a monophonic audio file
               FileRead.cpp    Audio file input class (no internal data storage) for RAW, WAV, SND (AU), AIFF, MAT-file files
               WvIn.h          Abstract base class for audio data input classes
               FileWvIn.cpp    Audio file input interface class with interpolation
               FileLoop.cpp    Wavetable looping (subclass of FileWvIn)
               RtWvIn.cpp      Realtime audio input class (subclass of WvIn)
               InetWvIn.cpp    Audio streaming (socket server) input class (subclass of WvIn)

Sinks:         FileWrite.cpp   Audio file output class (no internal data storage) for RAW, WAV, SND (AU), AIFF, MAT-file files
               WvOut.h         Abstract base class for audio data output classes
               FileWvOut.cpp   Audio file output interface class to FileWrite
               RtWvOut.cpp     Realtime audio output class (subclass of WvOut)
               InetWvOut.cpp   Audio streaming (socket client) output class (subclass of WvOut)

Filters:       Filter.h        Filter master class
               Iir.h           General infinite-impulse response filter
               Fir.h           General finite-impulse response filter
               OneZero.cpp     One zero filter
               OnePole.cpp     One pole filter
               PoleZero.cpp    One pole/one zero filter
               TwoZero.cpp     Two zero filter
               TwoPole.cpp     Two pole filter
               BiQuad.cpp      Two pole/two zero filter
               FormSwep.cpp    Sweepable biquad filter (goes to target by rate)
               Delay.cpp       Non-interpolating delay line class
               DelayL.cpp      Linearly interpolating delay line
               DelayA.cpp      Allpass interpolating delay line
               TapDelay.cpp    Multi-tap non-interpolating delay line class

Non-Linear:    JetTabl.h       Cubic jet non-linearity
               BowTabl.h       x^(-3) Bow non-linearity
               ReedTabl.h      One breakpoint saturating reed non-linearity
                                
Derived:       Modulate.cpp    Periodic and random vibrato: WvIn, Noise, OnePole
               SingWave.cpp    Looping wave table with randomness: Modulate, FileLoop, Envelope


********** INSTRUMENTS AND ALGORITHMS **************

Each class is listed either with some of the unit generators it uses, 
or in terms of the algorithm it implements.  All inherit from Instrmnt,
which inherits from Stk.

Simple.cpp      Simple Instrument              Pulse oscillator + resonant filtered noise
Plucked.cpp     Basic Plucked String           DelayA, OneZero, OnePole, Noise
StifKarp.cpp    Plucked String with Stiffness  DelayA, DelayL, OneZero, BiQuad, Noise
PluckTwo.cpp    Not So Basic Pluck             DelayL, DlineA, OneZero
Mandolin.cpp    Commuted Mandolin              <<flavor of PluckTwo>>
Bowed.cpp       So So Bowed String             DelayL, BowTabl, OnePole, BiQuad, WaveLoop, ADSR
Brass.cpp       Not So Bad Brass Instrument    DelayA, BiQuad, PoleZero, ADSR, WaveLoop
Clarinet.cpp    Pretty Good Clarinet           DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop
BlowHole.cpp    Clarinet w/ Tone & Vent Holes  DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop, PoleZero
Saxofony.cpp    A Faux Saxophone               DelayL, ReedTabl, OneZero, Envelope, Noise, WaveLoop
Flute.cpp       Pretty Good Flute              JetTabl, DelayL, OnePole, PoleZero, Noise, ADSR, WaveLoop
BlowBotl.cpp    Blown Bottle                   JetTabl, BiQuad, PoleZero, Noise, ADSR, WaveLoop
BandedWG.cpp    Banded Waveguide Meta-Object   Delay, BowTabl, ADSR, BiQuad
Modal.cpp       N Resonances                   Envelope, WaveLoop, BiQuad, OnePole
ModalBar.cpp    Various presets                4 Resonance Models
FM.cpp          N Operator FM Master           ADSR, WaveLoop, TwoZero
HevyMetl.cpp    Distorted FM Synthesizer       3 Cascade with FB Modulator
PercFlut.cpp    Percussive Flute               3 Cascade Operators
Rhodey.cpp      Rhodes-Like Electric Piano     2 Parallel Simple FMs
Wurley.cpp      Wurlitzer Electric Piano       2 Parallel Simple FMs
TubeBell.cpp    Classic FM Bell                2 Parallel Simple FMs
FMVoices.cpp    3 Formant FM Voice             3 Carriers Share 1 Modulator
VoicForm.cpp    4 Formant Voice Synthesis      FormSwep, SingWave, OnePole, OneZero, Envelope, Noise
BeeThree.cpp    Cheezy Additive Organ          4 Oscillators Additive
Sampler.cpp     Sampling Synthesizer           5 each ADSR, WvIn, WaveLoop, OnePole
Moog.cpp        Swept Filter                   Sampler with Swept Filter
Resonate.cpp    Filtered Noise                 ADSR, BiQuad, Noise
Drummer.cpp     Drum Synthesizer               Bunch of WvIns, and OnePole
Shakers.cpp     PhISM statistical model for shakers and real-world sound effects
Mesh2D.cpp      Two-dimensional, rectilinear digital waveguide mesh.
Whistle.cpp     Hybrid physical/spectral model of a police whistle.

Effect.h      Effects Processor Base Class
JCRev.cpp       Chowning Reverberator           3 series allpass units, 4 parallel combs, 2 stereo delays
NRev.cpp        Another famous CCRMA Reverb	    8 allpass, 6 parallel comb filters
PRCRev.cpp      Dirt Cheap Reverb by Cook	      2 allpass, 2 comb filters
Flanger.cpp     Flanger Effects Processor       DelayL, WaveLoop
Chorus.cpp      Chorus Effects Processor        DelayL, WaveLoop
PitShift.cpp    Cheap Pitch Shifter             DelayL


***********   OTHER SUPPORT CLASSES AND FILES   **************

RtAudio.cpp     Multi-OS/API audio I/O routines
RtMidi.cpp      Multi-OS/API MIDI I/O routines
Messager.cpp    Pipe, socket, and MIDI control message handling
Voicer.cpp      Multi-instrument voice manager

demo.cpp        Demonstration program for most synthesis algorithms
effects.cpp     Effects demonstration program
ragamatic.cpp   Nirvana just waiting to happen

Skini.cpp	      SKINI file/message parser object
SKINI.msg	      #defines for often used and universal MIDI/SKINI symbols
SKINI.tbl	      Table of SKINI messages


