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