Marsyas
0.6.0-alpha
|
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 }