libcm is a C development framework with an emphasis on audio signal processing applications.
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

cmMath.h 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #ifndef cmMath_h
  2. #define cmMath_h
  3. double cmX80ToDouble( unsigned char s[10] );
  4. void cmDoubleToX80( double v, unsigned char s[10] );
  5. bool cmIsPowerOfTwo( unsigned i );
  6. unsigned cmNextPowerOfTwo( unsigned i );
  7. unsigned cmNearPowerOfTwo( unsigned i );
  8. bool cmIsOddU( unsigned v );
  9. bool cmIsEvenU( unsigned v );
  10. unsigned cmNextOddU( unsigned v );
  11. unsigned cmPrevOddU( unsigned v );
  12. unsigned cmNextEvenU( unsigned v );
  13. unsigned cmPrevEvenU( unsigned v );
  14. // modified bessel function of first kind, order 0
  15. // ref: orfandis appendix B io.m
  16. double cmBessel0( double x );
  17. //=================================================================
  18. // The following elliptic-related function approximations come from
  19. // Parks & Burrus, Digital Filter Design, Appendix program 9, pp. 317-326
  20. // which in turn draws directly on other sources
  21. // calculate complete elliptic integral (quarter period) K
  22. // given *complimentary* modulus kc
  23. cmReal_t cmEllipK( cmReal_t kc );
  24. // calculate elliptic modulus k
  25. // given ratio of complete elliptic integrals r = K/K'
  26. // (solves the "degree equation" for fixed N = K*K1'/K'K1)
  27. cmReal_t cmEllipDeg( cmReal_t r );
  28. // calculate arc elliptic tangent u (elliptic integral of the 1st kind)
  29. // given argument x = sc(u,k) and *complimentary* modulus kc
  30. cmReal_t cmEllipArcSc( cmReal_t x, cmReal_t kc );
  31. // calculate Jacobi elliptic functions sn, cn, and dn
  32. // given argument u and *complimentary* modulus kc
  33. cmRC_t cmEllipJ( cmReal_t u, cmReal_t kc, cmReal_t* sn, cmReal_t* cn, cmReal_t* dn );
  34. //=================================================================
  35. // bilinear transform
  36. // z = (2*sr + s)/(2*sr - s)
  37. cmRC_t cmBlt( unsigned n, cmReal_t sr, cmReal_t* rp, cmReal_t* ip );
  38. //=================================================================
  39. // Pitch conversion
  40. unsigned cmHzToMidi( double hz );
  41. float cmMidiToHz( unsigned midi );
  42. //=================================================================
  43. // Floating point byte swapping
  44. unsigned cmFfSwapFloatToUInt( float v );
  45. float cmFfSwapUIntToFloat( unsigned v );
  46. unsigned long long cmFfSwapDoubleToULLong( double v );
  47. double cmFfSwapULLongToDouble( unsigned long long v );
  48. //=================================================================
  49. int cmRandInt( int min, int max );
  50. unsigned cmRandUInt( unsigned min, unsigned max );
  51. float cmRandFloat( float min, float max );
  52. double cmRandDouble( double min, double max );
  53. //=================================================================
  54. bool cmIsCloseD( double x0, double x1, double eps );
  55. bool cmIsCloseF( float x0, float x1, double eps );
  56. bool cmIsCloseI( int x0, int x1, double eps );
  57. bool cmIsCloseU( unsigned x0, unsigned x1, double eps );
  58. #endif