#ifndef cmOnset_h #define cmOnset_h #ifdef __cplusplus extern "C" { #endif enum { kOkOnRC = cmOkRC, kDspProcFailOnRC, kDspAudioFileFailOnRC, kDspTextFileFailOnRC, }; typedef cmRC_t cmOnRC_t; typedef cmHandle_t cmOnH_t; enum { kNoneFiltId, kSmoothFiltId, kMedianFiltId }; typedef struct { double wndMs; unsigned hopFact; unsigned audioChIdx; unsigned wndFrmCnt; // Detection window length double preWndMult; // Detection window stretch factor prior to current location. double threshold; // Spectal flux detection threshold double maxFrqHz; // Ignore frequencies above maxFrqHz during processing. double filtCoeff; // smoothing filter coeff (-.7) double medFiltWndMs;// median filter window in milliseconds unsigned filterId; // kSmoothFiltId || kMedianFiltId double preDelayMs; // move each detection preDelayMs backwards in time // on the audio output. (compensates for detection delay due to filtering) } cmOnsetCfg_t; extern cmOnH_t cmOnsetNullHandle; cmOnRC_t cmOnsetInitialize( cmCtx_t* c, cmOnH_t* hp ); cmOnRC_t cmOnsetFinalize( cmOnH_t* hp ); bool cmOnsetIsValid( cmOnH_t h ); cmOnRC_t cmOnsetProc( cmOnH_t h, const cmOnsetCfg_t* cfg, const cmChar_t* inAudioFn ); cmOnRC_t cmOnsetWrite( cmOnH_t h, const cmChar_t* outAudioFn, const cmChar_t* outTextFn); cmOnRC_t cmOnsetTest( cmCtx_t* c ); #ifdef __cplusplus } #endif #endif