00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifdef USE_INTEL_MATH
00024 #include <mathimf.h>
00025 #else
00026 #include <math.h>
00027 #endif
00028 #include <float.h>
00029
00030 #include <Alloc.hh>
00031
00032 #include "dsp/dsptypes.h"
00033 #include "dsp/DSPConfig.hh"
00034 #include "dsp/Transform4.hh"
00035 #include "dsp/Transform8.hh"
00036 #include "dsp/TransformS.hh"
00037
00038 #ifdef DSP_USE_FFTW
00039 #include <fftw3.h>
00040 #endif
00041
00042
00043 #ifndef DSPOP_HH
00044 #define DSPOP_HH
00045
00046
00047 #ifdef __GNUG__
00048 #define CONSTFUNC __const__
00049 #else
00050 #define CONSTFUNC
00051 #endif
00052
00053
00054 #ifndef __INTEL_COMPILER
00055 #define INLINE inline
00056 #else
00057 #define INLINE
00058 #endif
00059
00060
00061 #if (defined(__BCPLUSPLUS__) || defined(SOLARIS) || defined(OSX))
00062 #if (!defined(OSX))
00063 #define isgreater(x, y) (x > y)
00064 #define isless(x, y) (x < y)
00065 #endif
00066 #define fmax(x, y) ((x >= y) ? x : y)
00067 #define fmin(x, y) ((x <= y) ? x : y)
00068 #define fmaxf(x, y) fmax(x, y)
00069 #define fminf(x, y) fmin(x, y)
00070 #define fma(x, y, z) (z + x * y)
00071 #define fmaf(x, y, z) fma(x, y, z)
00072 #define fabsf(x) fabs(x)
00073 #define powf(x, y) pow(x, y)
00074 #define sqrtf(x) sqrt(x)
00075 #define expf(x) exp(x)
00076 #define logf(x) log(x)
00077 #define log10f(x) log10(x)
00078 #define sinf(x) sin(x)
00079 #define sinhf(x) sinh(x)
00080 #define cosf(x) cos(x)
00081 #define coshf(x) cosh(x)
00082 #define atanf(x) atan(x)
00083 #define atan2f(x, y) atan2(x, y)
00084 #define acosf(x) acos(x)
00085 #define acosh(x) (log(x + sqrt(x * x - 1)))
00086 #define acoshf(x) (logf(x + sqrtf(x * x - 1)))
00087 #define hypotf(x, y) hypot(x, y)
00088 #endif
00089
00090
00091 #ifdef _MSC_VER
00092 #define fmax(x, y) ((x >= y) ? x : y)
00093 #define fmin(x, y) ((x <= y) ? x : y)
00094 #define fmaxf(x, y) fmax(x, y)
00095 #define fminf(x, y) fmin(x, y)
00096 #define fma(x, y, z) (z + x * y)
00097 #define fmaf(x, y, z) fma(x, y, z)
00098 #define acosh(x) (log(x + sqrt(x * x - 1)))
00099 #define acoshf(x) (logf(x + sqrtf(x * x - 1)))
00100 #define hypotf(x, y) hypot(x, y)
00101 #define isgreater(x, y) (x > y)
00102 #define isless(x, y) (x < y)
00103 #endif
00104
00105
00106 #ifdef __INTEL_COMPILER
00107 #undef isgreater
00108 #undef isless
00109 #define isgreater(x, y) (x > y)
00110 #define isless(x, y) (x < y)
00111 #endif
00112
00113
00114 #define DSP_MAXBESSEL 32L
00115
00116
00117 #define DSP_WISDOM_FILE "fftw.wisdom"
00118
00119
00124 class clDSPAlloc : public clAlloc
00125 {
00126 public:
00127 clDSPAlloc () {}
00128 clDSPAlloc (const clDSPAlloc &CopySrc) : clAlloc(CopySrc) {}
00129 clDSPAlloc (long lAllocSize) : clAlloc(lAllocSize) {}
00130 operator stSCplx *()
00131 { return ((stpSCplx) vpPtr); }
00132 operator stDCplx *()
00133 { return ((stpDCplx) vpPtr); }
00134 operator stSPolar *()
00135 { return ((stpSPolar) vpPtr); }
00136 operator stDPolar *()
00137 { return ((stpDPolar) vpPtr); }
00138 #if defined(DSP_USE_FFTW)
00139 operator fftwf_complex *()
00140 { return ((fftwf_complex *) vpPtr); }
00141 operator fftw_complex *()
00142 { return ((fftw_complex *) vpPtr); }
00143 #endif
00144 };
00145
00149 class clDSPOp
00150 {
00151 long lPrevSrcCount;
00152 long lPrevDestCount;
00153 float fPI;
00154 double dPI;
00155
00156
00157 int iFIRDlyIdx;
00158 long lFIRLength;
00159 clDSPAlloc FIRCoeff;
00160 clDSPAlloc FIRBuf;
00161 clDSPAlloc FIRWork;
00162
00163 float fpIIR_C[5];
00164 float fpIIR_X[3];
00165 float fpIIR_Y[2];
00166 double dpIIR_C[5];
00167 double dpIIR_X[3];
00168 double dpIIR_Y[2];
00169
00170 bool bFFTInitialized;
00171 bool bRealTransform;
00172 long lFFTLength;
00173 float fFFTScale;
00174 double dFFTScale;
00175 long *lpSBitRevWork;
00176 long *lpDBitRevWork;
00177 float *fpCosSinTable;
00178 double *dpCosSinTable;
00179 void *vpSTfrm;
00180 void *vpDTfrm;
00181 clDSPAlloc SBitRevWork;
00182 clDSPAlloc DBitRevWork;
00183 clDSPAlloc SCosSinTable;
00184 clDSPAlloc DCosSinTable;
00185 clDSPAlloc FFTBuf;
00186 #if defined(DSP_USE_FFTW)
00187 fftwf_plan fftwpSPlan;
00188 fftwf_plan fftwpSIPlan;
00189 fftw_plan fftwpDPlan;
00190 fftw_plan fftwpDIPlan;
00191 #endif
00192 #if defined(DSP_USE_RADIX4)
00193 clTransform4 Tfrm;
00194 #elif defined(DSP_USE_RADIX8)
00195 clTransform8 Tfrm;
00196 #else // Split-radix
00197 clTransformS Tfrm;
00198 #endif
00199 protected:
00211 static void Cart2Polar (float *, float *, float, float);
00213 static void Cart2Polar (double *, double *, double, double);
00220 static void Cart2Polar (float *, float *, const stpSCplx);
00222 static void Cart2Polar (double *, double *, const stpDCplx);
00228 static void Cart2Polar (stpSPolar, const stpSCplx);
00230 static void Cart2Polar (stpDPolar, const stpDCplx);
00235 static void Cart2Polar (utpSCoord);
00237 static void Cart2Polar (utpDCoord);
00246 static void Polar2Cart (float *, float *, float, float);
00248 static void Polar2Cart (double *, double *, double, double);
00250 static void Polar2Cart (stpSCplx, float, float);
00252 static void Polar2Cart (stpDCplx, double, double);
00254 static void Polar2Cart (stpSCplx, const stpSPolar);
00256 static void Polar2Cart (stpDCplx, const stpDPolar);
00258 static void Polar2Cart (utpSCoord);
00260 static void Polar2Cart (utpDCoord);
00269 static void CplxAdd (stpSCplx, const stpSCplx);
00271 static void CplxAdd (stpDCplx, const stpDCplx);
00278 static void CplxAdd (stpSCplx, const stpSCplx, const stpSCplx);
00280 static void CplxAdd (stpDCplx, const stpDCplx, const stpDCplx);
00289 static void CplxSub (stpSCplx, const stpSCplx);
00291 static void CplxSub (stpDCplx, const stpDCplx);
00298 static void CplxSub (stpSCplx, const stpSCplx, const stpSCplx);
00300 static void CplxSub (stpDCplx, const stpDCplx, const stpDCplx);
00309 static void CplxMul (stpSCplx, float);
00311 static void CplxMul (stpDCplx, double);
00321 static void CplxMul (stpSCplx, const stpSCplx);
00323 static void CplxMul (stpDCplx, const stpDCplx);
00330 static void CplxMul (stpSCplx, const stpSCplx, const stpSCplx);
00332 static void CplxMul (stpDCplx, const stpDCplx, const stpDCplx);
00342 static void CplxMulC (stpSCplx, const stpSCplx);
00344 static void CplxMulC (stpDCplx, const stpDCplx);
00351 static void CplxMulC (stpSCplx, const stpSCplx, const stpSCplx);
00353 static void CplxMulC (stpDCplx, const stpDCplx, const stpDCplx);
00363 static void CplxDiv (stpSCplx, const stpSCplx);
00365 static void CplxDiv (stpDCplx, const stpDCplx);
00372 static void CplxDiv (stpSCplx, const stpSCplx, const stpSCplx);
00374 static void CplxDiv (stpDCplx, const stpDCplx, const stpDCplx);
00375
00385 static void CplxExp (stpSCplx, const stpSCplx);
00386 static void CplxExp (stpDCplx, const stpDCplx);
00393 static void CplxLog (stpSCplx, const stpSCplx);
00394 static void CplxLog (stpDCplx, const stpDCplx);
00401 static void CplxLog10 (stpSCplx, const stpSCplx);
00402 static void CplxLog10 (stpDCplx, const stpDCplx);
00408 static void CplxPow (stpSCplx, const stpSCplx, const stpSCplx);
00409 static void CplxPow (stpDCplx, const stpDCplx, const stpDCplx);
00415 static void CplxRoot (stpSCplx, const stpSCplx, const stpSCplx);
00416 static void CplxRoot (stpDCplx, const stpDCplx, const stpDCplx);
00417 static void CplxConj (stpSCplx spCplx)
00418 { spCplx->I = -(spCplx->I); }
00419 static void CplxConj (stpDCplx spCplx)
00420 { spCplx->I = -(spCplx->I); }
00421 static void CplxConj (stpSCplx, const stpSCplx);
00422 static void CplxConj (stpDCplx, const stpDCplx);
00430 static double Multiple (long);
00438 static float ModZeroBessel (float);
00440 static double ModZeroBessel (double);
00450 static float ChebyshevPolynom (float, float);
00451 static double ChebyshevPolynom (double, double);
00452 public:
00453 clDSPOp();
00454 ~clDSPOp();
00458 static signed long Round (float);
00459 static signed long Round (double);
00469 static void Add (float *, float, long);
00471 static void Add (double *, double, long);
00473 static void Add (stpSCplx, stSCplx, long);
00475 static void Add (stpDCplx, stDCplx, long);
00485 static void Add (float *, const float *, long);
00487 static void Add (double *, const double *, long);
00489 static void Add (stpSCplx, const stpSCplx, long);
00491 static void Add (stpDCplx, const stpDCplx, long);
00502 static void Add (float *, const float *, const float *, long);
00504 static void Add (double *, const double *, const double *, long);
00506 static void Add (stpSCplx, const stpSCplx, const stpSCplx, long);
00508 static void Add (stpDCplx, const stpDCplx, const stpDCplx, long);
00518 static void Sub (float *, float, long);
00520 static void Sub (double *, double, long);
00522 static void Sub (stpSCplx, stSCplx, long);
00524 static void Sub (stpDCplx, stDCplx, long);
00534 static void Sub (float *, const float *, long);
00536 static void Sub (double *, const double *, long);
00538 static void Sub (stpSCplx, const stpSCplx, long);
00540 static void Sub (stpDCplx, const stpDCplx, long);
00551 static void Sub (float *, const float *, const float *, long);
00553 static void Sub (double *, const double *, const double *, long);
00555 static void Sub (stpSCplx, const stpSCplx, const stpSCplx, long);
00557 static void Sub (stpDCplx, const stpDCplx, const stpDCplx, long);
00567 static void Mul (float *, float, long);
00569 static void Mul (double *, double, long);
00571 static void Mul (stpSCplx, float, long);
00573 static void Mul (stpDCplx, double, long);
00575 static void Mul (stpSCplx, stSCplx, long);
00577 static void Mul (stpDCplx, stDCplx, long);
00588 static void Mul (float *, const float *, float, long);
00590 static void Mul (double *, const double *, double, long);
00600 static void Mul (float *, const float *, long);
00602 static void Mul (double *, const double *, long);
00604 static void Mul (stpSCplx, const float *, long);
00606 static void Mul (stpDCplx, const double *, long);
00608 static void Mul (stpSCplx, const stpSCplx, long);
00610 static void Mul (stpDCplx, const stpDCplx, long);
00621 static void Mul (float *, const float *, const float *, long);
00623 static void Mul (double *, const double *, const double *, long);
00625 static void Mul (stpSCplx, const stpSCplx, const stpSCplx, long);
00627 static void Mul (stpDCplx, const stpDCplx, const stpDCplx, long);
00638 static void MulC (stpSCplx, const stpSCplx, long);
00640 static void MulC (stpDCplx, const stpDCplx, long);
00642 static void MulC (stpSCplx, const stpSCplx, const stpSCplx, long);
00644 static void MulC (stpDCplx, const stpDCplx, const stpDCplx, long);
00656 static void Mul2 (float *, float *, const float *, long);
00658 static void Mul2 (double *, double *, const double *, long);
00669 static void Mul2 (float *, float *, const float *,
00670 const float *, const float *, long);
00672 static void Mul2 (double *, double *, const double *,
00673 const double *, const double *, long);
00683 static void Div (float *, float, long);
00685 static void Div (double *, double, long);
00687 static void Div (stpSCplx, stSCplx, long);
00689 static void Div (stpDCplx, stDCplx, long);
00699 static void Div (float *, const float *, long);
00701 static void Div (double *, const double *, long);
00703 static void Div (stpSCplx, const stpSCplx, long);
00705 static void Div (stpDCplx, const stpDCplx, long);
00716 static void Div (float *, const float *, const float *, long);
00718 static void Div (double *, const double *, const double *, long);
00720 static void Div (stpSCplx, const stpSCplx, const stpSCplx, long);
00722 static void Div (stpDCplx, const stpDCplx, const stpDCplx, long);
00731 static void Div1x (float *, long);
00733 static void Div1x (double *, long);
00743 static void Div1x (float *, const float *, long);
00745 static void Div1x (double *, const double *, long);
00756 static void MulAdd (float *, float, float, long);
00757 static void MulAdd (double *, double, double, long);
00769 static void MulAdd (float *, const float *, float, float, long);
00770 static void MulAdd (double *, const double *, double, double, long);
00779 static void Abs (float *, long);
00781 static void Abs (double *, long);
00791 static void Abs (float *, const float *, long);
00793 static void Abs (double *, const double *, long);
00802 static void Sqrt (float *, long);
00804 static void Sqrt (double *, long);
00814 static void Sqrt (float *, const float *, long);
00816 static void Sqrt (double *, const double *, long);
00823 static void Zero (float *, long);
00825 static void Zero (double *, long);
00827 static void Zero (stpSCplx, long);
00829 static void Zero (stpDCplx, long);
00837 static void Set (float *, float, long);
00839 static void Set (double *, double, long);
00841 static void Set (stpSCplx, stSCplx, long);
00843 static void Set (stpDCplx, stDCplx, long);
00854 static void Set (float *, float, long, long, long);
00856 static void Set (double *, double, long, long, long);
00858 static void Set (stpSCplx, stSCplx, long, long, long);
00860 static void Set (stpDCplx, stDCplx, long, long, long);
00871 static void Clip (float *, float, long);
00873 static void Clip (double *, double, long);
00885 static void Clip (float *, const float *, float, long);
00887 static void Clip (double *, const double *, double, long);
00900 static void Clip (float *, float, float, long);
00902 static void Clip (double *, double, double, long);
00916 static void Clip (float *, const float *, float, float, long);
00918 static void Clip (double *, const double *, double, double, long);
00928 static void ClipZero (float *, long);
00930 static void ClipZero (double *, long);
00941 static void ClipZero (float *, const float *, long);
00943 static void ClipZero (double *, const double *, long);
00951 static void Copy (float *, const float *, long);
00953 static void Copy (double *, const double *, long);
00955 static void Copy (stpSCplx, const stpSCplx, long);
00957 static void Copy (stpDCplx, const stpDCplx, long);
00959 static void Copy (float *, float *, const float *, long);
00961 static void Copy (double *, double *, const double *, long);
00973 static float Convolve (const float *, const float *, long);
00975 static double Convolve (const double *, const double *, long);
00987 static void Convolve (float *, const float *, const float *,
00988 long);
00990 static void Convolve (double *, const double *, const double *,
00991 long);
01003 static float Correlate (const float *, const float *, long);
01005 static double Correlate (const double *, const double *, long);
01017 static void Correlate (float *, const float *, const float *,
01018 long);
01020 static void Correlate (double *, const double *, const double *,
01021 long);
01032 static float AutoCorrelate (const float *, long);
01034 static double AutoCorrelate (const double *, long);
01045 static void AutoCorrelate (float *, const float *, long);
01047 static void AutoCorrelate (double *, const double *, long);
01058 static float DotProduct (const float *, const float *, long);
01060 static double DotProduct (const double *, const double *, long);
01069 static void MinMax (float *, float *, const float *, long);
01071 static void MinMax (double *, double *, const double *, long);
01081 static float Mean (const float *, long);
01083 static double Mean (const double *, long);
01095 static float Median (const float *, long);
01097 static double Median (const double *, long);
01106 static void Negate (float *, long);
01108 static void Negate (double *, long);
01118 static void Negate (float *, const float *, long);
01120 static void Negate (double *, const double *, long);
01129 static void Normalize (float *, long);
01131 static void Normalize (double *, long);
01141 static void Normalize (float *, const float *, long);
01143 static void Normalize (double *, const double *, long);
01153 static float Product (const float *, long);
01155 static double Product (const double *, long);
01164 static void Reverse (float *, long);
01166 static void Reverse (double *, long);
01168 static void Reverse (stpSCplx, long);
01170 static void Reverse (stpDCplx, long);
01180 static void Reverse (float *, const float *, long);
01182 static void Reverse (double *, const double *, long);
01184 static void Reverse (stpSCplx, const stpSCplx, long);
01186 static void Reverse (stpDCplx, const stpDCplx, long);
01195 static void Scale (float *, long);
01197 static void Scale (double *, long);
01204 static void Scale (float *, const float *, long);
01206 static void Scale (double *, const double *, long);
01215 static void Scale01 (float *, long);
01217 static void Scale01 (double *, long);
01224 static void Scale01 (float *, const float *, long);
01226 static void Scale01 (double *, const double *, long);
01234 static void Sort (float *, long);
01236 static void Sort (double *, long);
01238 static void Sort (long *, long);
01250 static void StdDev (float *, float *, const float *, long);
01252 static void StdDev (double *, double *, const double *, long);
01262 static float Sum (const float *, long);
01264 static double Sum (const double *, long);
01273 static void Square (float *, long);
01275 static void Square (double *, long);
01285 static void Square (float *, const float *, long);
01287 static void Square (double *, const double *, long);
01297 static void Convert (float *, const unsigned char *, long);
01305 static void Convert (float *, const signed short *, long, bool);
01313 static void Convert (float *, const signed int *, long, bool);
01315 static void Convert (float *, const double *, long);
01317 static void Convert (double *, const unsigned char *, long);
01319 static void Convert (double *, const signed short *, long, bool);
01321 static void Convert (double *, const signed int *, long, bool);
01323 static void Convert (double *, const float *, long);
01325 static void Convert (unsigned char *, const float *, long);
01327 static void Convert (unsigned char *, const double *, long);
01329 static void Convert (signed short *, const float *, long, bool);
01331 static void Convert (signed short *, const double *, long, bool);
01333 static void Convert (signed int *, const float *, long, bool);
01335 static void Convert (signed int *, const double *, long, bool);
01346 static void CartToPolar (float *, float *, const float *,
01347 const float *, long);
01349 static void CartToPolar (double *, double *, const double *,
01350 const double *, long);
01358 static void CartToPolar (float *, float *, const stpSCplx, long);
01360 static void CartToPolar (double *, double *, const stpDCplx, long);
01367 static void CartToPolar (stpSPolar, const stpSCplx, long);
01369 static void CartToPolar (stpDPolar, const stpDCplx, long);
01373 static void CartToPolar (utpSCoord, long);
01375 static void CartToPolar (utpDCoord, long);
01386 static void PolarToCart (float *, float *, const float *,
01387 const float *, long);
01389 static void PolarToCart (double *, double *, const double *,
01390 const double *, long);
01398 static void PolarToCart (stpSCplx, const float *, const float *,
01399 long);
01401 static void PolarToCart (stpDCplx, const double *, const double *,
01402 long);
01409 static void PolarToCart (stpSCplx, const stpSPolar, long);
01411 static void PolarToCart (stpDCplx, const stpDPolar, long);
01415 static void PolarToCart (utpSCoord, long);
01417 static void PolarToCart (utpDCoord, long);
01430 static float CrossCorr (const float *, const float *, long);
01432 static double CrossCorr (const double *, const double *, long);
01447 static float DelCrossCorr (const float *, const float *, long,
01448 long);
01450 static double DelCrossCorr (const double *, const double *, long,
01451 long);
01467 static void DelCrossCorr (float *, const float *, const float *,
01468 long, const long *, long);
01470 static void DelCrossCorr (double *, const double *, const double *,
01471 long, const long *, long);
01481 static float Energy (const float *, long);
01483 static double Energy (const double *, long);
01493 static void Magnitude (float *, const stpSCplx, long);
01495 static void Magnitude (double *, const stpDCplx, long);
01505 static void Power (float *, const stpSCplx, long);
01507 static void Power (double *, const stpDCplx, long);
01517 static void Phase (float *, const stpSCplx, long);
01519 static void Phase (double *, const stpDCplx, long);
01529 static void PowerPhase (float *, float *, const stpSCplx, long);
01531 static void PowerPhase (double *, double *, const stpDCplx, long);
01541 static void Decimate (float *, const float *, long, long);
01543 static void Decimate (double *, const double *, long, long);
01553 static void DecimateAvg (float *, const float *, long, long);
01555 static void DecimateAvg (double *, const double *, long, long);
01564 static void Interpolate (float *, const float *, long, long);
01566 static void Interpolate (double *, const double *, long, long);
01580 static void InterpolateAvg (float *, const float *, long, long);
01581 static void InterpolateAvg (double *, const double *, long, long);
01590 static void Resample (float *, long, const float *, long);
01591 static void Resample (double *, long, const double *, long);
01600 static void ResampleAvg (float *, long, const float *, long);
01601 static void ResampleAvg (double *, long, const double *, long);
01611 static float RMS (const float *, long);
01613 static double RMS (const double *, long);
01627 static float Variance (float *, float *, const float *, long);
01629 static double Variance (double *, double *, const double *, long);
01637 static float PeakLevel (const float *, long);
01639 static double PeakLevel (const double *, long);
01646 void WinBartlett (float *, long);
01648 void WinBartlett (double *, long);
01657
01658 void WinBlackman (float *, long);
01660 void WinBlackman (double *, long);
01672 void WinBlackman (float *, long, float);
01673 void WinBlackman (double *, long, double);
01682 void WinBlackmanHarris (float *, long);
01684 void WinBlackmanHarris (double *, long);
01693 void WinCosTapered (float *, long);
01695 void WinCosTapered (double *, long);
01700 void WinCosTaperedA (float *, long);
01702 void WinCosTaperedA (double *, long);
01707 void WinCosTaperedA (float *, const float *, long);
01709 void WinCosTaperedA (double *, const double *, long);
01718 void WinExactBlackman (float *, long);
01720 void WinExactBlackman (double *, long);
01730 void WinExp (float *, float, long);
01732 void WinExp (double *, double, long);
01741 void WinFlatTop (float *, long);
01743 void WinFlatTop (double *, long);
01754 void WinGenericCos (float *, long, const float *, long);
01756 void WinGenericCos (double *, long, const double *, long);
01765 void WinHamming (float *, long);
01767 void WinHamming (double *, long);
01776 void WinHanning (float *, long);
01778 void WinHanning (double *, long);
01790 void WinKaiser (float *, float, long);
01792 void WinKaiser (double *, double, long);
01803 void WinKaiserBessel (float *, float, long);
01805 void WinKaiserBessel (double *, double, long);
01814 void WinTukey (float *, long);
01816 void WinTukey (double *, long);
01829 void WinDolphChebyshev (float *, float, long);
01830 void WinDolphChebyshev (double *, double, long);
01838 static void Mix (float *, const float *, long);
01840 static void Mix (double *, const double *, long);
01845 static void Mix (float *, const float *, const float *, long);
01847 static void Mix (double *, const double *, const double *, long);
01852 static void Mix (float *, const float *, long, long);
01854 static void Mix (double *, const double *, long, long);
01864 void Spatialize (float *, float *, const float *, long);
01866 void Spatialize (double *, double *, const double *, long);
01868 void Spatialize (float *, const float *, long);
01870 void Spatialize (double *, const double *, long);
01880 static void Extract (float *, const float *, long, long, long);
01882 static void Extract (double *, const double *, long, long, long);
01892 static void Pack (float *, const float *, long, long, long);
01894 static void Pack (double *, const double *, long, long, long);
01914 long ReBuffer (float *, const float *, long, long);
01916 long ReBuffer (double *, const double *, long, long);
01925 double DegToRad (double dSource)
01926 { return ((dPI / 180.0) * dSource); }
01928 float DegToRad (float fSource)
01929 { return ((fPI / 180.0F) * fSource); }
01938 double RadToDeg (double dSource)
01939 { return ((180.0 / dPI) * dSource); }
01941 float RadToDeg (float fSource)
01942 { return ((180.0F / fPI) * fSource); }
01948 static void FFTWConvert (stpSCplx, const float *, long);
01950 static void FFTWConvert (stpDCplx, const float *, long);
01952 static void FFTWConvert (stpSCplx, const double *, long);
01954 static void FFTWConvert (stpDCplx, const double *, long);
01958 static void FFTWConvert (float *, const stpSCplx, long);
01960 static void FFTWConvert (float *, const stpDCplx, long);
01962 static void FFTWConvert (double *, const stpSCplx, long);
01964 static void FFTWConvert (double *, const stpDCplx, long);
01971 void FIRAllocate (const float *, long);
01973 void FIRAllocate (const double *, long);
01980 void FIRFilter (float *, long);
01982 void FIRFilter (double *, long);
01989 void FIRFilter (float *, const float *, long);
01991 void FIRFilter (double *, const double *, long);
02002 void FIRFilterF (float *, float *, long);
02004 void FIRFilterF (double *, double *, long);
02008 void FIRFree ();
02018 void IIRInitialize (const float *);
02020 void IIRInitialize (const double *);
02030 void IIRFilter (float *, long);
02032 void IIRFilter (double *, long);
02039 void IIRFilter (float *, const float *, long);
02041 void IIRFilter (double *, const double *, long);
02045 void IIRClear ();
02052 void FFTInitialize (long, bool);
02056 void FFTUninitialize ();
02064 void FFTi (stpSCplx, float *);
02066 void FFTi (stpDCplx, double *);
02074 void FFTo (stpSCplx, const float *);
02076 void FFTo (stpDCplx, const double *);
02078 void FFTo (stpSCplx, const stpSCplx);
02080 void FFTo (stpDCplx, const stpDCplx);
02088 void IFFTo (float *, const stpSCplx);
02090 void IFFTo (double *, const stpDCplx);
02092 void IFFTo (stpSCplx, const stpSCplx);
02094 void IFFTo (stpDCplx, const stpDCplx);
02095 };
02096
02097 #endif
02098