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

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

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, LentPitShift, PRCRev, JCRev, NRev, FreeVerb)
     |
     |- Voicer, Message, Skini, MidiFileIn, Phonemes, Sphere, Vector3D
     |
     |- Messager
     |
     |- Twang, Guitar
     |
     |            .- FM - (HevyMetl, PercFlut, Rhodey, Wurley, TubeBell, BeeThree, FMVoices)
     |            |
     |            |- Modal - ModalBar
     |            |
     |            |- VoicForm
     |            |
     |            |- Sampler - Moog
     |            |
     |            |- Resonate
     |            |
     |            |- Mandolin
     .- Instrmnt -|
                  |- Drummer
                  |
                  |- Clarinet, BlowHole, Saxofony, Flute, Brass, BlowBotl, Bowed, Plucked, StifKarp, Sitar, Recorder
                  |
                  |- 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
Twang.cpp        Not So Basic Pluck             DelayL, DlineA, Fir, allows commuted synthesis
Mandolin.cpp     Commuted Mandolin              2 Twangs
Guitar.cpp       N-String Guitar                N Twangs, bridge coupling, allows feedback and body filter
StifKarp.cpp     Plucked String with Stiffness  DelayA, DelayL, OneZero, BiQuad, Noise
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
Recorder.cpp     A More Physical Flute          DelayL, IIR, Noise, ADSR, SineWave
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
FreeVerb.cpp     Jezar at Dreampoint's FreeVerb  4 allpass, 8 lowpass comb filters
Flanger.cpp      Flanger Effects Processor       DelayL, WaveLoop
Chorus.cpp       Chorus Effects Processor        DelayL, WaveLoop
PitShift.cpp     Cheap Pitch Shifter             DelayL
LentPitShift.cpp Pitch Shifter based Lent Algorithm


***********   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
SKINImsg.h	      #defines for often used and universal MIDI/SKINI symbols
SKINItbl.h	      Table of SKINI messages


