Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   Tutorial


Stk.h

00001 /***************************************************/
00013 /***************************************************/
00014 
00015 #if !defined(__STK_H)
00016 #define __STK_H
00017 
00018 #include <string>
00019 
00020 // Most data in STK is passed and calculated with the
00021 // following user-definable floating-point type.  You
00022 // can change this to "float" if you prefer or perhaps
00023 // a "long double" in the future.
00024 typedef double MY_FLOAT;
00025 
00026 // The "MY_FLOAT" type will be deprecated in STK
00027 // versions higher than 4.1.2 and replaced with the variable
00028 // "StkFloat".
00029 //typedef double StkFloat;
00030 //#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__)
00031 //  #pragma deprecated(MY_FLOAT)
00032 //#else
00033 //  typedef StkFloat MY_FLOAT __attribute__ ((deprecated));
00034 //#endif
00035 
00037 
00042 class StkError
00043 {
00044 public:
00045   enum TYPE { 
00046     WARNING,
00047     DEBUG_WARNING,
00048     FUNCTION_ARGUMENT,
00049     FILE_NOT_FOUND,
00050     FILE_UNKNOWN_FORMAT,
00051     FILE_ERROR,
00052     PROCESS_THREAD,
00053     PROCESS_SOCKET,
00054     PROCESS_SOCKET_IPADDR,
00055     AUDIO_SYSTEM,
00056     MIDI_SYSTEM,
00057     UNSPECIFIED
00058   };
00059 
00060 protected:
00061   char message[256];
00062   TYPE type;
00063 
00064 public:
00066   StkError(const char *p, TYPE tipe = StkError::UNSPECIFIED);
00067 
00069   virtual ~StkError(void);
00070 
00072   virtual void printMessage(void);
00073 
00075   virtual const TYPE& getType(void) { return type; }
00076 
00078   virtual const char *getMessage(void) const { return message; }
00079 };
00080 
00081 
00082 class Stk
00083 {
00084 public:
00085 
00086   typedef unsigned long STK_FORMAT;
00087   static const STK_FORMAT STK_SINT8;   
00088   static const STK_FORMAT STK_SINT16;  
00089   static const STK_FORMAT STK_SINT32;  
00090   static const STK_FORMAT MY_FLOAT32; 
00091   static const STK_FORMAT MY_FLOAT64; 
00093 
00094   static MY_FLOAT sampleRate(void);
00095 
00097 
00105   static void setSampleRate(MY_FLOAT newRate);
00106 
00108   static std::string rawwavePath(void);
00109 
00111   static void setRawwavePath(std::string newPath);
00112 
00114   static void swap16(unsigned char *ptr);
00115 
00117   static void swap32(unsigned char *ptr);
00118 
00120   static void swap64(unsigned char *ptr);
00121 
00123   static void sleep(unsigned long milliseconds);
00124 
00125 private:
00126   static MY_FLOAT srate;
00127   static std::string rawwavepath;
00128 
00129 protected:
00130 
00132   Stk(void);
00133 
00135   virtual ~Stk(void);
00136 
00138   static void handleError( const char *message, StkError::TYPE type );
00139 
00140 };
00141 
00142 // Here are a few other useful typedefs.
00143 typedef signed short SINT16;
00144 typedef signed int SINT32;
00145 typedef float FLOAT32;
00146 typedef double FLOAT64;
00147 
00148 // Boolean values
00149 #define FALSE 0
00150 #define TRUE 1
00151 
00152 // The default sampling rate.
00153 #define SRATE (MY_FLOAT) 44100.0
00154 
00155 // The default real-time audio input and output buffer size.  If
00156 // clicks are occuring in the input and/or output sound stream, a
00157 // larger buffer size may help.  Larger buffer sizes, however, produce
00158 // more latency.
00159 #define RT_BUFFER_SIZE 512
00160 
00161 // The default rawwave path value is set with the preprocessor
00162 // definition RAWWAVE_PATH.  This can be specified as an argument to
00163 // the configure script, in an integrated development environment, or
00164 // below.  The global STK rawwave path variable can be dynamically set
00165 // with the Stk::setRawwavePath() function.  This value is
00166 // concatenated to the beginning of all references to rawwave files in
00167 // the various STK core classes (ex. Clarinet.cpp).  If you wish to
00168 // move the rawwaves directory to a different location in your file
00169 // system, you will need to set this path definition appropriately.
00170 #if !defined(RAWWAVE_PATH)
00171   #define RAWWAVE_PATH "../../rawwaves/"
00172 #endif
00173 
00174 #define PI (MY_FLOAT) 3.14159265359
00175 #define TWO_PI (MY_FLOAT) (MY_FLOAT) (2 * PI)
00176 
00177 #define ONE_OVER_128 (MY_FLOAT) 0.0078125
00178 
00179 #if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__)
00180   #define __OS_WINDOWS__
00181   #define __STK_REALTIME__
00182 #elif defined(__LINUX_OSS__) || defined(__LINUX_ALSA__) || defined(__LINUX_JACK__)
00183   #define __OS_LINUX__
00184   #define __STK_REALTIME__
00185 #elif defined(__IRIX_AL__)
00186   #define __OS_IRIX__
00187   #define __STK_REALTIME__
00188 #elif defined(__MACOSX_CORE__)
00189   #define __OS_MACOSX__
00190   #define __STK_REALTIME__
00191 #endif
00192 
00193 //#define _STK_DEBUG_
00194 
00195 #endif

The Synthesis ToolKit in C++ (STK)
©1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.