68 lignes
2.2 KiB
C
68 lignes
2.2 KiB
C
#ifndef cmMath_h
|
|
#define cmMath_h
|
|
|
|
double cmX80ToDouble( unsigned char s[10] );
|
|
void cmDoubleToX80( double v, unsigned char s[10] );
|
|
|
|
bool cmIsPowerOfTwo( unsigned i );
|
|
unsigned cmNextPowerOfTwo( unsigned i );
|
|
unsigned cmNearPowerOfTwo( unsigned i );
|
|
|
|
bool cmIsOddU( unsigned v );
|
|
bool cmIsEvenU( unsigned v );
|
|
unsigned cmNextOddU( unsigned v );
|
|
unsigned cmPrevOddU( unsigned v );
|
|
unsigned cmNextEvenU( unsigned v );
|
|
unsigned cmPrevEvenU( unsigned v );
|
|
|
|
|
|
// modified bessel function of first kind, order 0
|
|
// ref: orfandis appendix B io.m
|
|
double cmBessel0( double x );
|
|
|
|
|
|
//=================================================================
|
|
// The following elliptic-related function approximations come from
|
|
// Parks & Burrus, Digital Filter Design, Appendix program 9, pp. 317-326
|
|
// which in turn draws directly on other sources
|
|
|
|
// calculate complete elliptic integral (quarter period) K
|
|
// given *complimentary* modulus kc
|
|
cmReal_t cmEllipK( cmReal_t kc );
|
|
|
|
// calculate elliptic modulus k
|
|
// given ratio of complete elliptic integrals r = K/K'
|
|
// (solves the "degree equation" for fixed N = K*K1'/K'K1)
|
|
cmReal_t cmEllipDeg( cmReal_t r );
|
|
|
|
// calculate arc elliptic tangent u (elliptic integral of the 1st kind)
|
|
// given argument x = sc(u,k) and *complimentary* modulus kc
|
|
cmReal_t cmEllipArcSc( cmReal_t x, cmReal_t kc );
|
|
|
|
// calculate Jacobi elliptic functions sn, cn, and dn
|
|
// given argument u and *complimentary* modulus kc
|
|
cmRC_t cmEllipJ( cmReal_t u, cmReal_t kc, cmReal_t* sn, cmReal_t* cn, cmReal_t* dn );
|
|
|
|
|
|
//=================================================================
|
|
// bilinear transform
|
|
// z = (2*sr + s)/(2*sr - s)
|
|
cmRC_t cmBlt( unsigned n, cmReal_t sr, cmReal_t* rp, cmReal_t* ip );
|
|
|
|
|
|
//=================================================================
|
|
// Pitch conversion
|
|
unsigned cmHzToMidi( double hz );
|
|
float cmMidiToHz( unsigned midi );
|
|
|
|
//=================================================================
|
|
// Floating point byte swapping
|
|
unsigned cmFfSwapFloatToUInt( float v );
|
|
float cmFfSwapUIntToFloat( unsigned v );
|
|
unsigned long long cmFfSwapDoubleToULLong( double v );
|
|
double cmFfSwapULLongToDouble( unsigned long long v );
|
|
|
|
|
|
|
|
#endif
|