/*******************************************/
/*  Object Class, by Perry R. Cook, 1995-96*/ 
/*  This is mostly here for compatibility  */
/*  with Objective C.  We'll also stick    */
/*  global defines here, so everyone will  */
/*  see them.                              */
/*******************************************/

#if !defined(__Object_h)
#define __Object_h

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

class Object
{
  public:
  protected:
    Object();
    ~Object();
};

/* #define __OS_NeXT_ */
/* #define __OS_IRIX_ */
#define __OS_Linux_
/* #define __OS_Win95_ */

#if defined(__OS_NeXT_) /* For NeXTStep - Black or White Hardware */
  #define __NeXT_
  #define PI (MY_FLOAT) 3.14159265359
#elif defined(__OS_IRIX_) /* For SGI */
  #define __SGI_REALTIME_
  #define PI (MY_FLOAT) 3.14159265359
  typedef int bool;
#elif defined(__OS_Linux_) /* For Linux */
  #define PI (MY_FLOAT) 3.14159265359
  #define __USS_REALTIME_
  #define __LITTLE_ENDIAN__
#elif defined(__OS_Win95_) /* For Windows95 */
  #define __WIN95_REALTIME_
#endif

/* #define RT_BUFFER_SIZE 256 */
#define RT_BUFFER_SIZE 256

/* SRATE here is 44100, others are derived accordingly  */
#define SRATE 44100.0
#define SRATE_OVER_TWO 22050.0
#define ONE_OVER_SRATE 0.00002267573696
#define RATE_NORM 0.5
#define TWO_PI_OVER_SRATE 0.0001424758573

/* SRATE here is 22050, others are derived accordingly   */
/*
  #define   SRATE (MY_FLOAT)  22050.0
  #define SRATE_OVER_TWO (MY_FLOAT)  11025.0
  #define ONE_OVER_SRATE (MY_FLOAT)  0.00004535147392
  #define RATE_NORM (MY_FLOAT)  1.0
  #define TWO_PI_OVER_SRATE 0.0002849517146
*/

/* SRATE here is 16000, others are derived accordingly   */
/*   #define   SRATE (MY_FLOAT)  16000.0
     #define SRATE_OVER_TWO (MY_FLOAT)  8000.0
     #define ONE_OVER_SRATE (MY_FLOAT)  0.0000625
     #define RATE_NORM (MY_FLOAT)  1.375
     #define TWO_PI_OVER_SRATE 0.000392699
*/


/* SRATE here is 8k, others are derived accordingly   */
/*   #define SRATE 8000.0
     #define SRATE_OVER_TWO 4000
     #define ONE_OVER_SRATE 0.00012500000000
     #define RATE_NORM 2.75625
     #define TWO_PI_OVER_SRATE 0.0002849517146??????????????????
*/      /*   RATE_NORM is 22050 / 8000  */

/* Yer Basic Trigonometric constants  */
#define TWO_PI (MY_FLOAT) 6.28318530718
#define ONE_OVER_TWO_PI (MY_FLOAT) 0.15915494309
#define SQRT_TWO 1.414213562

/* States for Envelopes, etc.         */

#define ATTACK 0
#define DECAY 1
#define SUSTAIN 2
#define RELEASE 3

/* Machine dependent stuff, possibly useful for optimization        */
/*    for example, changing double to float here increases          */
/*    performance (speed) by a whopping 4-6% on 486-flavor machines */
/*    BUT!! a change from float to double here increases speed by   */
/*    30% or so on SGI machines                                     */

#define MY_FLOAT      double
#define MY_FLOAT_SIZE 8

/* #define MY_FLOAT      float */
/* #define MY_FLOAT_SIZE 4 */

/* Debugging define, causes massive printf's to come out.           */
/* Also enables timing calculations in WaveOut class, other stuff.  */

/* #define _debug_ 1 */

/* MIDI definitions  */
#define NORM_7 (MY_FLOAT) 0.0078125 /* this is 1/128 */
		
#endif
