From 10e0265429983876e2fd69950df4d51c8faf5635 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Thu, 2 Jan 2003 04:37:31 +0000 Subject: "" svn path=/trunk/; revision=316 --- externals/grill/flext/tutorial/stk2/main.cpp | 109 +++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 externals/grill/flext/tutorial/stk2/main.cpp (limited to 'externals/grill/flext/tutorial/stk2/main.cpp') diff --git a/externals/grill/flext/tutorial/stk2/main.cpp b/externals/grill/flext/tutorial/stk2/main.cpp new file mode 100644 index 00000000..5d6cb72c --- /dev/null +++ b/externals/grill/flext/tutorial/stk2/main.cpp @@ -0,0 +1,109 @@ +/* +flext tutorial - stk 2 + +Copyright (c) 2002,2003 Thomas Grill (xovo@gmx.net) +For information on usage and redistribution, and for a DISCLAIMER OF ALL +WARRANTIES, see the file, "license.txt," in this distribution. + +------------------------------------------------------------------------- + +This is an example of an external using the STK ("synthesis toolkit") library. +For STK see http://ccrma-www.stanford.edu/software/stk + +STK needs C++ exceptions switched on. + +The STK tutorial examples assume that a static stk library exists which contains all the +source files (except rt*.cpp) of the stk/src directory. +The library should be compiled multithreaded and with the appropriate compiler flags for +the respective platform (e.g. __OS_WINDOWS__ and __LITTLE_ENDIAN__ for Windows) + +*/ + +#include + +#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 401) +#error You need at least flext version 0.4.1 +#endif + +#include "PitShift.h" + + +class stk2: + public flext_stk +{ + FLEXT_HEADER_S(stk2,flext_stk,Setup) + +public: + stk2(); + + void m_sh1(float f) { if(inst[0]) inst[0]->setShift(f); } + void m_sh2(float f) { if(inst[1]) inst[1]->setShift(f); } + + // these are obligatory! + virtual bool NewObjs(); // create STK instruments + virtual void FreeObjs(); // destroy STK instruments + virtual void ProcessObjs(int n); // do DSP processing + + PitShift *inst[2]; + +private: + static void Setup(t_class *c); + + FLEXT_CALLBACK_F(m_sh1) + FLEXT_CALLBACK_F(m_sh2) +}; + +FLEXT_NEW_DSP("stk2~",stk2) + + +stk2::stk2() +{ + AddInSignal(); + AddOutSignal(2); + + inst[0] = inst[1] = NULL; +} + +void stk2::Setup(t_class *c) +{ + FLEXT_CADDMETHOD_F(c,0,"shL",m_sh1); + FLEXT_CADDMETHOD_F(c,0,"shR",m_sh2); +} + + +// create STK instruments +bool stk2::NewObjs() +{ + bool ok = true; + + // set up objects + try { + for(int i = 0; i < 2; ++i) + inst[i] = new PitShift; + } + catch (StkError &) { + post("%s - Noise() setup failed!",thisName()); + ok = false; + } + return ok; +} + + +// destroy the STK instruments +void stk2::FreeObjs() +{ + for(int i = 0; i < 2; ++i) + if(inst[i]) delete inst[i]; +} + +// this is called on every DSP block +void stk2::ProcessObjs(int n) +{ + while(n--) { + MY_FLOAT f = Inlet(0).tick(); + for(int i = 0; i < 2; ++i) + Outlet(i).tick(inst[i]->tick(f)); + } +} + + -- cgit v1.2.1