andrew@0: andrew@0: andrew@0: #ifndef CHROMAGRAM_H andrew@0: #define CHROMAGRAM_H andrew@0: andrew@0: #include "fftw3.h" andrew@0: andrew@0: class Chromagram andrew@0: { andrew@0: public: andrew@0: Chromagram(); // constructor andrew@0: ~Chromagram(); // destructor andrew@0: void chromacalc(float frame[]); andrew@0: void initialise(int framesize,int hsize); andrew@0: void processframe(float frame[]); andrew@0: andrew@0: float rawChroma[12]; andrew@0: float chroma[12]; andrew@0: float chroma_low[12]; andrew@0: int chromaready; andrew@0: andrew@0: float maximumChromaValue; andrew@0: andrew@0: private: andrew@0: void hamming(int N); andrew@0: void makeprofiles(); andrew@0: void getmagspectrum(); andrew@0: void generatechromagram(); andrew@0: //float euclidean(float v1[],float v2[],int length); andrew@0: float max(float array[],int length); andrew@0: int minindex(float array[],int length); andrew@0: void downsampleframe(float frame[]); andrew@0: andrew@0: int bsize; andrew@0: int count; andrew@0: int hopsize; andrew@0: int fsize; andrew@0: int calcrate; andrew@0: float ratio; andrew@0: andrew@0: float *buffer; // audio buffer andrew@0: float *wbuffer; // windowed audio buffer andrew@0: float *win; // hanning window andrew@0: float *mag; andrew@0: float *d_frame; andrew@0: float *hop; andrew@0: andrew@0: andrew@0: float note[12]; andrew@0: int harmonics; andrew@0: int octaves; andrew@0: int search; andrew@0: andrew@0: fftwf_plan p; // create fft plan andrew@0: fftwf_complex *out; // to hold complex fft values andrew@0: andrew@0: float pi; andrew@0: andrew@0: andrew@0: }; andrew@0: andrew@0: #endif