Marsyas  0.6.0-alpha
/usr/src/RPM/BUILD/marsyas-0.6.0/src/marsyas/Stk.cpp
Go to the documentation of this file.
00001 /***************************************************/
00013 /***************************************************/
00014 
00015 #include "Stk.h"
00016 #include <stdio.h>
00017 #include <string.h>
00018 #include "config.h"  // needed to recognize MARSYAS_* defines
00019 
00020 #if (defined(MARSYAS_IRIX) || defined(MARSYAS_CYGWIN) || defined(MARSYAS_LINUX) || defined(MARSYAS_MACOSX))
00021 # include <unistd.h>
00022 #endif
00023 
00024 using namespace Marsyas;
00025 
00026 MY_FLOAT Stk :: srate = (MY_FLOAT) SRATE;
00027 std::string Stk :: rawwavepath = RAWWAVE_PATH;
00028 const Stk::STK_FORMAT Stk :: STK_SINT8 = 1;
00029 const Stk::STK_FORMAT Stk :: STK_SINT16 = 2;
00030 const Stk::STK_FORMAT Stk :: STK_SINT32 = 8;
00031 const Stk::STK_FORMAT Stk :: MY_FLOAT32 = 16;
00032 const Stk::STK_FORMAT Stk :: MY_FLOAT64 = 32;
00033 
00034 Stk :: Stk(void)
00035 {
00036 }
00037 
00038 Stk :: ~Stk(void)
00039 {
00040 }
00041 
00042 MY_FLOAT Stk :: sampleRate(void)
00043 {
00044   return srate;
00045 }
00046 
00047 void Stk :: setSampleRate(MY_FLOAT newRate)
00048 {
00049   if (newRate > 0)
00050     srate = newRate;
00051 }
00052 
00053 std::string Stk :: rawwavePath(void)
00054 {
00055   return rawwavepath;
00056 }
00057 
00058 void Stk :: setRawwavePath(std::string newPath)
00059 {
00060   if ( !newPath.empty() )
00061     rawwavepath = newPath;
00062 
00063   // Make sure the path includes a "/"
00064   if ( rawwavepath[rawwavepath.length()-1] != '/' )
00065     rawwavepath += "/";
00066 }
00067 
00068 void Stk :: swap16(unsigned char *ptr)
00069 {
00070   register unsigned char val;
00071 
00072   // Swap 1st and 2nd bytes
00073   val = *(ptr);
00074   *(ptr) = *(ptr+1);
00075   *(ptr+1) = val;
00076 }
00077 
00078 void Stk :: swap32(unsigned char *ptr)
00079 {
00080   register unsigned char val;
00081 
00082   // Swap 1st and 4th bytes
00083   val = *(ptr);
00084   *(ptr) = *(ptr+3);
00085   *(ptr+3) = val;
00086 
00087   //Swap 2nd and 3rd bytes
00088   ptr += 1;
00089   val = *(ptr);
00090   *(ptr) = *(ptr+1);
00091   *(ptr+1) = val;
00092 }
00093 
00094 void Stk :: swap64(unsigned char *ptr)
00095 {
00096   register unsigned char val;
00097 
00098   // Swap 1st and 8th bytes
00099   val = *(ptr);
00100   *(ptr) = *(ptr+7);
00101   *(ptr+7) = val;
00102 
00103   // Swap 2nd and 7th bytes
00104   ptr += 1;
00105   val = *(ptr);
00106   *(ptr) = *(ptr+5);
00107   *(ptr+5) = val;
00108 
00109   // Swap 3rd and 6th bytes
00110   ptr += 1;
00111   val = *(ptr);
00112   *(ptr) = *(ptr+3);
00113   *(ptr+3) = val;
00114 
00115   // Swap 4th and 5th bytes
00116   ptr += 1;
00117   val = *(ptr);
00118   *(ptr) = *(ptr+1);
00119   *(ptr+1) = val;
00120 }
00121 
00122 #if (defined(MARSYAS_IRIX) || defined(MARSYAS_CYGWIN) || defined(MARSYAS_MACOSX))
00123 #include <unistd.h>
00124 #elif defined(MARSYAS_WIN32)
00125 #include <windows.h>
00126 #endif
00127 
00128 void Stk :: sleep(unsigned long milliseconds)
00129 {
00130 #if defined(MARSYAS_WIN32)
00131   Sleep((DWORD) milliseconds);
00132 #elif (defined(MARSYAS_IRIX) || defined(MARSYAS_CYGWIN) || defined(MARSYAS_LINUX) || defined(MARSYAS_MACOSX))
00133   usleep( (unsigned long) (milliseconds * 1000.0) );
00134 #endif
00135 }
00136 
00137 void Stk :: handleError( const char *message, StkError::TYPE type )
00138 {
00139   if (type == StkError::WARNING)
00140     fprintf(stderr, "\n%s\n\n", message);
00141   else if (type == StkError::DEBUG_WARNING) {
00142 #if defined(_STK_DEBUG_)
00143     fprintf(stderr, "\n%s\n\n", message);
00144 #endif
00145   }
00146   else {
00147     // Print error message before throwing.
00148     fprintf(stderr, "\n%s\n\n", message);
00149     throw StkError(message, type);
00150   }
00151 }
00152 
00153 StkError :: StkError(const char *p, TYPE tipe)
00154   : type(tipe)
00155 {
00156   strncpy(message, p, 256);
00157 }
00158 
00159 StkError :: ~StkError(void)
00160 {
00161 }
00162 
00163 void StkError :: printMessage(void)
00164 {
00165   printf("\n%s\n\n", message);
00166 }