00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00046 #ifndef XTRACT_H
00047 #define XTRACT_H
00048
00049 #ifdef __cplusplus
00050 extern "C" {
00051 #endif
00052
00058 #include "xtract_scalar.h"
00059 #include "xtract_vector.h"
00060 #include "xtract_delta.h"
00061 #include "xtract_types.h"
00062 #include "xtract_macros.h"
00063 #include "xtract_helper.h"
00064
00071 #define XTRACT_FEATURES 60
00072
00074 enum xtract_features_ {
00075 XTRACT_MEAN,
00076 XTRACT_VARIANCE,
00077 XTRACT_STANDARD_DEVIATION,
00078 XTRACT_AVERAGE_DEVIATION,
00079 XTRACT_SKEWNESS,
00080 XTRACT_KURTOSIS,
00081 XTRACT_SPECTRAL_MEAN,
00082 XTRACT_SPECTRAL_VARIANCE,
00083 XTRACT_SPECTRAL_STANDARD_DEVIATION,
00084 XTRACT_SPECTRAL_AVERAGE_DEVIATION,
00085 XTRACT_SPECTRAL_SKEWNESS,
00086 XTRACT_SPECTRAL_KURTOSIS,
00087 XTRACT_SPECTRAL_CENTROID,
00088 XTRACT_IRREGULARITY_K,
00089 XTRACT_IRREGULARITY_J,
00090 XTRACT_TRISTIMULUS_1,
00091 XTRACT_TRISTIMULUS_2,
00092 XTRACT_TRISTIMULUS_3,
00093 XTRACT_SMOOTHNESS,
00094 XTRACT_SPREAD,
00095 XTRACT_ZCR,
00096 XTRACT_ROLLOFF,
00097 XTRACT_LOUDNESS,
00098 XTRACT_FLATNESS,
00099 XTRACT_FLATNESS_DB,
00100 XTRACT_TONALITY,
00101 XTRACT_CREST,
00102 XTRACT_NOISINESS,
00103 XTRACT_RMS_AMPLITUDE,
00104 XTRACT_SPECTRAL_INHARMONICITY,
00105 XTRACT_POWER,
00106 XTRACT_ODD_EVEN_RATIO,
00107 XTRACT_SHARPNESS,
00108 XTRACT_SPECTRAL_SLOPE,
00109 XTRACT_LOWEST_VALUE,
00110 XTRACT_HIGHEST_VALUE,
00111 XTRACT_SUM,
00112 XTRACT_NONZERO_COUNT,
00113 XTRACT_HPS,
00114 XTRACT_F0,
00115 XTRACT_FAILSAFE_F0,
00116 XTRACT_LNORM,
00117 XTRACT_FLUX,
00118 XTRACT_ATTACK_TIME,
00119 XTRACT_DECAY_TIME,
00120 XTRACT_DIFFERENCE_VECTOR,
00121 XTRACT_AUTOCORRELATION,
00122 XTRACT_AMDF,
00123 XTRACT_ASDF,
00124 XTRACT_BARK_COEFFICIENTS,
00125 XTRACT_PEAK_SPECTRUM,
00126 XTRACT_SPECTRUM,
00127 XTRACT_AUTOCORRELATION_FFT,
00128 XTRACT_MFCC,
00129 XTRACT_DCT,
00130 XTRACT_HARMONIC_SPECTRUM,
00131 XTRACT_LPC,
00132 XTRACT_LPCC,
00133 XTRACT_SUBBANDS,
00134
00135 XTRACT_WINDOWED
00136 };
00137
00139 enum xtract_feature_init_ {
00140 XTRACT_INIT_MFCC = 100,
00141 XTRACT_INIT_BARK,
00142 XTRACT_INIT_WINDOWED
00143 };
00144
00146 enum xtract_feature_types_ {
00147 XTRACT_SCALAR,
00148 XTRACT_VECTOR,
00149 XTRACT_DELTA
00150 };
00151
00153 enum xtract_mfcc_types_ {
00154 XTRACT_EQUAL_GAIN,
00155 XTRACT_EQUAL_AREA
00156 };
00157
00158 enum xtract_lnorm_filter_types_ {
00159 XTRACT_NO_LNORM_FILTER,
00160 XTRACT_POSITIVE_SLOPE,
00161 XTRACT_NEGATIVE_SLOPE
00162 };
00163
00165 enum xtract_return_codes_ {
00166 XTRACT_SUCCESS,
00167 XTRACT_MALLOC_FAILED,
00168 XTRACT_BAD_ARGV,
00169 XTRACT_BAD_VECTOR_SIZE,
00170 XTRACT_DENORMAL_FOUND,
00171 XTRACT_NO_RESULT,
00172 XTRACT_FEATURE_NOT_IMPLEMENTED
00173 };
00174
00176 enum xtract_spectrum_ {
00177 XTRACT_MAGNITUDE_SPECTRUM,
00178 XTRACT_LOG_MAGNITUDE_SPECTRUM,
00179 XTRACT_POWER_SPECTRUM,
00180 XTRACT_LOG_POWER_SPECTRUM
00181 };
00182
00184 enum xtract_subband_scales_ {
00185 XTRACT_OCTAVE_SUBBANDS,
00186 XTRACT_LINEAR_SUBBANDS
00187 };
00188
00190 typedef enum type_ {
00191 XTRACT_FLOAT,
00192 XTRACT_FLOATARRAY,
00193 XTRACT_INT,
00194 XTRACT_MEL_FILTER
00195 } xtract_type_t;
00196
00198 typedef enum unit_ {
00199
00200 XTRACT_HERTZ = 2,
00201 XTRACT_ANY_AMPLITUDE_HERTZ,
00202 XTRACT_DBFS,
00203 XTRACT_DBFS_HERTZ,
00204 XTRACT_PERCENT,
00205 XTRACT_BINS,
00206 XTRACT_SONE
00207 } xtract_unit_t;
00208
00210 typedef enum {
00211 XTRACT_FALSE,
00212 XTRACT_TRUE
00213 } xtract_bool_t;
00214
00216 enum xtract_window_types_ {
00217 XTRACT_GAUSS,
00218 XTRACT_HAMMING,
00219 XTRACT_HANN,
00220 XTRACT_BARTLETT,
00221 XTRACT_TRIANGULAR,
00222 XTRACT_BARTLETT_HANN,
00223 XTRACT_BLACKMAN,
00224 XTRACT_KAISER,
00225 XTRACT_BLACKMAN_HARRIS
00226 };
00227
00229 typedef enum xtract_vector_ {
00230
00231 XTRACT_SPECTRAL,
00232
00233 XTRACT_SPECTRAL_MAGNITUDES,
00234
00235
00236 XTRACT_SPECTRAL_PEAKS,
00237
00238 XTRACT_SPECTRAL_PEAKS_MAGNITUDES,
00239
00240 XTRACT_SPECTRAL_PEAKS_FREQUENCIES,
00241
00242
00243 XTRACT_SPECTRAL_HARMONICS,
00244
00245 XTRACT_SPECTRAL_HARMONICS_MAGNITUDES,
00246
00247 XTRACT_SPECTRAL_HARMONICS_FREQUENCIES,
00248 XTRACT_AUTOCORRELATION_COEFFS,
00249 XTRACT_ARBITRARY_SERIES,
00250 XTRACT_AUDIO_SAMPLES,
00251 XTRACT_MEL_COEFFS,
00252 XTRACT_LPC_COEFFS,
00253 XTRACT_LPCC_COEFFS,
00254 XTRACT_BARK_COEFFS,
00255 XTRACT_SUBFRAMES,
00256 XTRACT_NO_DATA
00257 } xtract_vector_t;
00258
00260 typedef struct _xtract_function_descriptor {
00261
00262 int id;
00263
00264 struct {
00265 char name[XTRACT_MAX_NAME_LENGTH];
00266 char p_name[XTRACT_MAX_NAME_LENGTH];
00267 char desc[XTRACT_MAX_DESC_LENGTH];
00268 char p_desc[XTRACT_MAX_DESC_LENGTH];
00269 char author[XTRACT_MAX_AUTHOR_LENGTH];
00270 int year;
00271 } algo;
00272
00273 struct {
00274 xtract_vector_t format;
00275 xtract_unit_t unit;
00276 } data;
00277
00278 int argc;
00279
00280 struct {
00281 xtract_type_t type;
00282 float min[XTRACT_MAXARGS];
00283 float max[XTRACT_MAXARGS];
00284 float def[XTRACT_MAXARGS];
00285 xtract_unit_t unit[XTRACT_MAXARGS];
00286 int donor[XTRACT_MAXARGS];
00287 } argv;
00288
00289 xtract_bool_t is_scalar;
00290 xtract_bool_t is_delta;
00291
00292
00293 union {
00294
00295 struct {
00296 float min;
00297 float max;
00298 xtract_unit_t unit;
00299 } scalar;
00300
00301 struct {
00302 xtract_vector_t format;
00303 xtract_unit_t unit;
00304 } vector;
00305
00306 } result;
00307
00308 } xtract_function_descriptor_t;
00309
00356 #ifdef XTRACT_H
00357 extern int(*xtract[XTRACT_FEATURES])(const float *data, const int N, const void *argv, float *result);
00358
00359 #endif
00360
00362 typedef struct xtract_mel_filter_ {
00363 int n_filters;
00364 float **filters;
00365 } xtract_mel_filter;
00366
00371 int xtract_init_mfcc(int N, float nyquist, int style, float freq_min, float freq_max, int freq_bands, float **fft_tables);
00372
00381 int xtract_init_bark(int N, float sr, int *band_limits);
00382
00392 int xtract_init_fft(int N, int feature_name);
00393
00398 void xtract_free_fft(void);
00399
00406 float *xtract_init_window(const int N, const int type);
00407
00413 void xtract_free_window(float *window);
00414
00415
00416 xtract_function_descriptor_t *xtract_make_descriptors();
00417
00418
00419 int xtract_free_descriptors(xtract_function_descriptor_t *fd);
00420
00421
00424 #ifdef __cplusplus
00425 }
00426 #endif
00427
00428 #endif