cannam@21: #ifndef _LIB_MFCC_H cannam@21: #define _LIB_MFCC_H cannam@21: cannam@21: #define MFCC 6 cannam@21: cannam@21: typedef struct mfcc_t { cannam@21: cannam@21: /* Filter bank parameters */ cannam@21: double lowestFrequency; cannam@21: int linearFilters; cannam@21: double linearSpacing; cannam@21: int logFilters; cannam@21: double logSpacing; cannam@21: cannam@21: /* FFT length */ cannam@21: int fftSize; cannam@21: cannam@21: /* Analysis window length*/ cannam@21: int windowSize; cannam@21: cannam@21: int totalFilters; cannam@21: cannam@21: /* Misc. */ cannam@21: int samplingRate; cannam@21: int nceps; cannam@21: cannam@21: /* MFCC vector */ cannam@21: double *ceps; cannam@21: cannam@21: double **mfccDCTMatrix; cannam@21: double **mfccFilterWeights; cannam@21: cannam@21: /* The analysis window */ cannam@21: double *window; cannam@21: cannam@21: /* For the FFT */ cannam@21: double* imagIn; // always zero cannam@21: double* realOut; cannam@21: double* imagOut; cannam@21: cannam@21: /* Set if user want C0 */ cannam@21: int WANT_C0; cannam@21: cannam@21: } mfcc_t; cannam@21: cannam@21: extern mfcc_t* init_mfcc(int fftSize, int nceps , int samplingRate, int WANT_C0); cannam@21: extern int do_mfcc(mfcc_t* mfcc_p, double* frame, int length); cannam@21: extern void close_mfcc(mfcc_t* mfcc_p); cannam@21: cannam@21: #endif cannam@21: