jamie@50: /* libxtract feature extraction library jamie@50: * jamie@50: * Copyright (C) 2006 Jamie Bullock jamie@50: * jamie@50: * This program is free software; you can redistribute it and/or modify jamie@50: * it under the terms of the GNU General Public License as published by jamie@50: * the Free Software Foundation; either version 2 of the License, or jamie@50: * (at your option) any later version. jamie@50: * jamie@50: * This program is distributed in the hope that it will be useful, jamie@50: * but WITHOUT ANY WARRANTY; without even the implied warranty of jamie@50: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jamie@50: * GNU General Public License for more details. jamie@50: * jamie@50: * You should have received a copy of the GNU General Public License jamie@50: * along with this program; if not, write to the Free Software jamie@50: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, jamie@50: * USA. jamie@50: */ jamie@50: jamie@50: #include "xtract/libxtract.h" jamie@56: #include "xtract_macros_private.h" jamie@50: #include jamie@50: #include jamie@50: #define XTRACT jamie@50: jamie@50: void *xtract_make_descriptors(){ jamie@52: jamie@50: int f , F; jamie@56: char *name, *p_name, *desc, *p_desc, *author; jamie@55: float *argv_min, *argv_max, *argv_def, *result_min, *result_max; jamie@56: int *argc, *year, *argv_donor; jamie@56: xtract_vector_t *data_format, *result_format; jamie@56: xtract_unit_t *data_unit, *argv_unit, *result_unit; jamie@56: xtract_bool_t *is_scalar; jamie@56: xtract_function_descriptor_t *fd, *d; jamie@56: xtract_type_t *argv_type; jamie@52: jamie@50: f = F = XTRACT_FEATURES; jamie@50: jamie@56: fd = malloc(XTRACT_FEATURES * sizeof(xtract_function_descriptor_t)); jamie@50: jamie@55: /* FIX - this file probably needs a rewrite for readability */ jamie@51: jamie@50: while(f--){ jamie@51: jamie@50: d = &fd[f]; jamie@51: argc = &d->argc; jamie@55: argv_type = &d->argv.type; jamie@51: jamie@50: switch(f){ jamie@52: jamie@56: case XTRACT_VARIANCE: jamie@56: case XTRACT_STANDARD_DEVIATION: jamie@56: case XTRACT_AVERAGE_DEVIATION: jamie@56: case XTRACT_SPECTRAL_VARIANCE: jamie@56: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@56: case XTRACT_SPECTRAL_AVERAGE_DEVIATION: jamie@56: case XTRACT_SPECTRAL_INHARMONICITY: jamie@56: case XTRACT_LOWEST_VALUE: jamie@56: case XTRACT_F0: jamie@56: case XTRACT_FAILSAFE_F0: jamie@56: case XTRACT_TONALITY: jamie@51: *argc = 1; jamie@56: *argv_type = XTRACT_FLOAT; jamie@50: break; jamie@56: case XTRACT_SKEWNESS: jamie@56: case XTRACT_KURTOSIS: jamie@56: case XTRACT_SPECTRAL_SKEWNESS: jamie@56: case XTRACT_SPECTRAL_KURTOSIS: jamie@56: case XTRACT_SPECTRUM: jamie@56: case XTRACT_PEAK_SPECTRUM: jamie@56: case XTRACT_HARMONIC_SPECTRUM: jamie@56: case XTRACT_NOISINESS: jamie@56: case XTRACT_CREST: jamie@56: case XTRACT_ROLLOFF: jamie@51: *argc = 2; jamie@56: *argv_type = XTRACT_FLOAT; jamie@50: break; jamie@56: case XTRACT_MFCC: jamie@51: *argc = 1; jamie@56: *argv_type = XTRACT_MEL_FILTER; jamie@50: break; jamie@56: case XTRACT_BARK_COEFFICIENTS: jamie@56: *argc = XTRACT_BARK_BANDS; jamie@56: *argv_type = XTRACT_INT; jamie@50: break; jamie@56: case XTRACT_MEAN: jamie@56: case XTRACT_SPECTRAL_MEAN: jamie@56: case XTRACT_SPECTRAL_CENTROID: jamie@56: case XTRACT_IRREGULARITY_K: jamie@56: case XTRACT_IRREGULARITY_J: jamie@56: case XTRACT_TRISTIMULUS_1: jamie@56: case XTRACT_TRISTIMULUS_2: jamie@56: case XTRACT_TRISTIMULUS_3: jamie@56: case XTRACT_SMOOTHNESS: jamie@56: case XTRACT_FLATNESS: jamie@56: case XTRACT_SPREAD: jamie@56: case XTRACT_ZCR: jamie@56: case XTRACT_LOUDNESS: jamie@56: case XTRACT_HIGHEST_VALUE: jamie@56: case XTRACT_SUM: jamie@56: case XTRACT_RMS_AMPLITUDE: jamie@56: case XTRACT_POWER: jamie@56: case XTRACT_SHARPNESS: jamie@56: case XTRACT_SPECTRAL_SLOPE: jamie@56: case XTRACT_HPS: jamie@56: case XTRACT_FLUX: jamie@56: case XTRACT_ATTACK_TIME: jamie@56: case XTRACT_DECAY_TIME: jamie@56: case XTRACT_DELTA_FEATURE: jamie@56: case XTRACT_AUTOCORRELATION_FFT: jamie@56: case XTRACT_DCT: jamie@56: case XTRACT_AUTOCORRELATION: jamie@56: case XTRACT_AMDF: jamie@56: case XTRACT_ASDF: jamie@59: case XTRACT_NONZERO_COUNT: jamie@59: case XTRACT_ODD_EVEN_RATIO: jamie@55: default: jamie@51: *argc = 0; jamie@50: break; jamie@55: } jamie@55: jamie@55: argv_min = &d->argv.min[0]; jamie@55: argv_max = &d->argv.max[0]; jamie@55: argv_def = &d->argv.def[0]; jamie@55: argv_unit = &d->argv.unit[0]; jamie@55: jamie@55: switch (f) { jamie@55: /* argc = 1 */ jamie@56: case XTRACT_VARIANCE: jamie@56: case XTRACT_SPECTRAL_VARIANCE: jamie@56: case XTRACT_STANDARD_DEVIATION: jamie@56: case XTRACT_AVERAGE_DEVIATION: jamie@56: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@56: case XTRACT_SPECTRAL_AVERAGE_DEVIATION: jamie@56: case XTRACT_LOWEST_VALUE: jamie@56: case XTRACT_TONALITY: jamie@56: case XTRACT_MFCC: jamie@104: case XTRACT_LPC: jamie@104: case XTRACT_LPCC: jamie@56: *argv_min = XTRACT_ANY; jamie@56: *argv_max = XTRACT_ANY; jamie@56: *argv_def = XTRACT_ANY; jamie@56: *argv_unit = XTRACT_ANY; jamie@104: break; jamie@56: case XTRACT_SPECTRAL_INHARMONICITY: jamie@55: *argv_min = 0.f; jamie@56: *argv_max = XTRACT_SR_UPPER_LIMIT / 2; jamie@56: *argv_def = XTRACT_FUNDAMENTAL_DEFAULT; jamie@56: *argv_unit = XTRACT_HERTZ; jamie@104: break; jamie@56: case XTRACT_F0: jamie@56: case XTRACT_FAILSAFE_F0: jamie@56: *argv_min = XTRACT_SR_LOWER_LIMIT; jamie@56: *argv_max = XTRACT_SR_UPPER_LIMIT; jamie@56: *argv_def = XTRACT_SR_DEFAULT; jamie@56: *argv_unit = XTRACT_HERTZ; jamie@104: break; jamie@55: /* argc = 2 */; jamie@56: case XTRACT_ROLLOFF: jamie@56: *argv_min = XTRACT_FFT_BANDS_MIN; jamie@56: *argv_max = XTRACT_FFT_BANDS_MAX; jamie@56: *argv_def = XTRACT_SPEC_BW_DEF ; jamie@56: *argv_unit = XTRACT_HERTZ; jamie@55: *(argv_min + 1) = 0.f; jamie@55: *(argv_max + 1) = 100.f; jamie@55: *(argv_def + 1) = 95.f; jamie@56: *(argv_unit + 1) = XTRACT_PERCENT; jamie@104: break; jamie@56: case XTRACT_SPECTRUM: jamie@56: *argv_min = XTRACT_SR_LOWER_LIMIT / 2; jamie@56: *argv_max = XTRACT_SR_UPPER_LIMIT / 2; jamie@56: *argv_def = XTRACT_SR_DEFAULT / 2; jamie@56: *argv_unit = XTRACT_HERTZ; jamie@55: *(argv_min + 1) = 0; jamie@55: *(argv_max + 1) = 3 ; jamie@55: *(argv_def + 1) = 0; jamie@56: *(argv_unit + 1) = XTRACT_NONE; jamie@104: break; jamie@56: case XTRACT_PEAK_SPECTRUM: jamie@56: *argv_min = XTRACT_SR_LOWER_LIMIT / 2; jamie@56: *argv_max = XTRACT_SR_UPPER_LIMIT / 2; jamie@56: *argv_def = XTRACT_SR_DEFAULT / 2; jamie@56: *argv_unit = XTRACT_HERTZ; jamie@55: *(argv_min + 1) = 0.f; jamie@55: *(argv_max + 1) = 100.f ; jamie@55: *(argv_def + 1) = 10.f ; jamie@56: *(argv_unit + 1) = XTRACT_PERCENT; jamie@104: break; jamie@56: case XTRACT_HARMONIC_SPECTRUM: jamie@55: *argv_min = 0.f; jamie@56: *argv_max = XTRACT_SR_UPPER_LIMIT / 2; jamie@56: *argv_def = XTRACT_FUNDAMENTAL_DEFAULT; jamie@56: *argv_unit = XTRACT_HERTZ; jamie@55: *(argv_min + 1) = 0.f; jamie@55: *(argv_max + 1) = 1.f ; jamie@55: *(argv_def + 1) = .1f ; jamie@56: *(argv_unit + 1) = XTRACT_NONE; jamie@104: break; jamie@56: case XTRACT_NOISINESS: jamie@56: case XTRACT_SKEWNESS: jamie@56: case XTRACT_KURTOSIS: jamie@56: case XTRACT_SPECTRAL_SKEWNESS: jamie@56: case XTRACT_SPECTRAL_KURTOSIS: jamie@56: case XTRACT_CREST: jamie@56: *argv_min = XTRACT_NONE; jamie@56: *argv_max = XTRACT_NONE; jamie@56: *argv_def = XTRACT_NONE; jamie@56: *argv_unit = XTRACT_NONE; jamie@56: *(argv_min + 1) = XTRACT_NONE; jamie@56: *(argv_max + 1) = XTRACT_NONE; jamie@56: *(argv_def + 1) = XTRACT_NONE; jamie@56: *(argv_unit + 1) = XTRACT_NONE; jamie@104: break; jamie@56: case XTRACT_BARK_COEFFICIENTS: jamie@55: /* BARK_COEFFICIENTS is special because argc = BARK_BANDS */ jamie@50: default: jamie@56: *argv_min = XTRACT_NONE; jamie@56: *argv_max = XTRACT_NONE; jamie@56: *argv_def = XTRACT_NONE; jamie@56: *argv_unit = XTRACT_NONE; jamie@104: break; jamie@55: } jamie@55: jamie@55: argv_donor = &d->argv.donor[0]; jamie@55: jamie@55: switch (f) { jamie@55: /* argc = 1 */ jamie@56: case XTRACT_VARIANCE: jamie@56: *argv_donor = XTRACT_MEAN; jamie@55: break; jamie@56: case XTRACT_SPECTRAL_VARIANCE: jamie@56: *argv_donor = XTRACT_SPECTRAL_MEAN; jamie@55: break; jamie@56: case XTRACT_STANDARD_DEVIATION: jamie@56: *argv_donor = XTRACT_VARIANCE; jamie@55: break; jamie@56: case XTRACT_AVERAGE_DEVIATION: jamie@56: *argv_donor = XTRACT_MEAN; jamie@55: break; jamie@56: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@56: *argv_donor = XTRACT_SPECTRAL_VARIANCE; jamie@55: break; jamie@56: case XTRACT_SPECTRAL_AVERAGE_DEVIATION: jamie@56: *argv_donor = XTRACT_SPECTRAL_MEAN; jamie@55: break; jamie@56: case XTRACT_SPECTRAL_INHARMONICITY: jamie@56: *argv_donor = XTRACT_FAILSAFE_F0; jamie@55: break; jamie@56: case XTRACT_TONALITY: jamie@56: *argv_donor = XTRACT_FLATNESS; jamie@55: break; jamie@56: case XTRACT_LOWEST_VALUE: jamie@56: case XTRACT_F0: jamie@56: case XTRACT_FAILSAFE_F0: jamie@56: *argv_donor = XTRACT_ANY; jamie@55: break; jamie@56: case XTRACT_MFCC: jamie@56: *argv_donor = XTRACT_INIT_MFCC; jamie@55: break; jamie@55: /* argc = 2 */; jamie@56: case XTRACT_SPECTRUM: jamie@56: case XTRACT_ROLLOFF: jamie@56: case XTRACT_PEAK_SPECTRUM: jamie@56: *argv_donor = XTRACT_ANY; jamie@56: *(argv_donor + 1) = XTRACT_ANY; jamie@55: break; jamie@56: case XTRACT_SKEWNESS: jamie@56: case XTRACT_KURTOSIS: jamie@56: *argv_donor = XTRACT_MEAN; jamie@56: *(argv_donor + 1) = XTRACT_STANDARD_DEVIATION; jamie@55: break; jamie@56: case XTRACT_SPECTRAL_SKEWNESS: jamie@56: case XTRACT_SPECTRAL_KURTOSIS: jamie@56: *argv_donor = XTRACT_SPECTRAL_MEAN; jamie@56: *(argv_donor + 1) = XTRACT_SPECTRAL_STANDARD_DEVIATION; jamie@55: break; jamie@56: case XTRACT_HARMONIC_SPECTRUM: jamie@56: *argv_donor = XTRACT_FAILSAFE_F0; jamie@56: *(argv_donor + 1) = XTRACT_ANY; jamie@55: break; jamie@56: case XTRACT_NOISINESS: jamie@56: *argv_donor = XTRACT_SUM; jamie@56: *(argv_donor + 1) = XTRACT_SUM; jamie@55: break; jamie@56: case XTRACT_CREST: jamie@56: *argv_donor = XTRACT_HIGHEST_VALUE; jamie@59: *(argv_donor + 1) = XTRACT_MEAN; jamie@55: break; jamie@55: /* argc = BARK_BANDS */ jamie@56: case XTRACT_BARK_COEFFICIENTS: jamie@56: *argv_donor = XTRACT_INIT_BARK; jamie@55: break; jamie@55: default: jamie@56: *argv_donor = XTRACT_ANY; jamie@50: break; jamie@50: } jamie@51: jamie@54: data_format = &d->data.format; jamie@54: jamie@54: switch(f){ jamie@54: jamie@56: case XTRACT_MEAN: jamie@56: case XTRACT_VARIANCE: jamie@56: case XTRACT_STANDARD_DEVIATION: jamie@56: case XTRACT_AVERAGE_DEVIATION: jamie@56: case XTRACT_SKEWNESS: jamie@56: case XTRACT_KURTOSIS: jamie@56: case XTRACT_LOWEST_VALUE: jamie@56: case XTRACT_HIGHEST_VALUE: jamie@56: case XTRACT_SUM: jamie@56: *data_format = XTRACT_ARBITRARY_SERIES; jamie@54: break; jamie@56: case XTRACT_SPECTRAL_MEAN: jamie@56: case XTRACT_SPECTRAL_VARIANCE: jamie@56: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@56: case XTRACT_SPECTRAL_AVERAGE_DEVIATION: jamie@56: case XTRACT_SPECTRAL_SKEWNESS: jamie@56: case XTRACT_SPECTRAL_KURTOSIS: jamie@56: case XTRACT_SPECTRAL_CENTROID: jamie@56: case XTRACT_SPECTRAL_SLOPE: jamie@56: *data_format = XTRACT_SPECTRAL; jamie@54: break; jamie@56: case XTRACT_ROLLOFF: jamie@56: case XTRACT_NOISINESS: jamie@56: case XTRACT_BARK_COEFFICIENTS: jamie@56: case XTRACT_CREST: jamie@56: case XTRACT_IRREGULARITY_K: jamie@56: case XTRACT_IRREGULARITY_J: jamie@56: case XTRACT_SMOOTHNESS: jamie@56: case XTRACT_FLATNESS: jamie@56: case XTRACT_SPREAD: jamie@56: case XTRACT_POWER: jamie@56: case XTRACT_HPS: jamie@59: case XTRACT_PEAK_SPECTRUM: jamie@60: case XTRACT_MFCC: jamie@56: *data_format = XTRACT_SPECTRAL_MAGNITUDES; jamie@54: break; jamie@104: case XTRACT_LPC: jamie@104: *data_format = XTRACT_AUTOCORRELATION_COEFFS; jamie@104: break; jamie@104: case XTRACT_LPCC: jamie@104: *data_format = XTRACT_LPC_COEFFS; jamie@104: break; jamie@56: case XTRACT_SPECTRAL_INHARMONICITY: jamie@59: case XTRACT_HARMONIC_SPECTRUM: jamie@56: *data_format = XTRACT_SPECTRAL_PEAKS; jamie@54: break; jamie@59: case XTRACT_NONZERO_COUNT: jamie@59: *data_format = XTRACT_SPECTRAL_PEAKS_MAGNITUDES; jamie@54: break; jamie@56: case XTRACT_F0: jamie@56: case XTRACT_FAILSAFE_F0: jamie@56: case XTRACT_SPECTRUM: jamie@56: case XTRACT_AUTOCORRELATION: jamie@56: case XTRACT_AUTOCORRELATION_FFT: jamie@56: case XTRACT_DCT: jamie@56: case XTRACT_AMDF: jamie@56: case XTRACT_ASDF: jamie@59: case XTRACT_ZCR: jamie@59: case XTRACT_RMS_AMPLITUDE: jamie@56: *data_format = XTRACT_AUDIO_SAMPLES; jamie@54: break; jamie@56: case XTRACT_TONALITY: jamie@56: *data_format = XTRACT_NO_DATA; jamie@54: break; jamie@56: case XTRACT_TRISTIMULUS_1: jamie@56: case XTRACT_TRISTIMULUS_2: jamie@56: case XTRACT_TRISTIMULUS_3: jamie@59: case XTRACT_ODD_EVEN_RATIO: jamie@56: *data_format = XTRACT_SPECTRAL_HARMONICS_MAGNITUDES; jamie@54: break; jamie@56: case XTRACT_LOUDNESS: jamie@59: case XTRACT_SHARPNESS: jamie@56: *data_format = XTRACT_BARK_COEFFS; jamie@54: break; jamie@56: case XTRACT_FLUX: jamie@56: case XTRACT_ATTACK_TIME: jamie@56: case XTRACT_DECAY_TIME: jamie@56: case XTRACT_DELTA_FEATURE: jamie@54: default: jamie@56: *data_format = XTRACT_NO_DATA; jamie@54: break; jamie@54: } jamie@54: jamie@55: data_unit = &d->data.unit; jamie@55: jamie@55: switch(f){ jamie@55: jamie@56: case XTRACT_MEAN: jamie@56: case XTRACT_VARIANCE: jamie@56: case XTRACT_STANDARD_DEVIATION: jamie@56: case XTRACT_AVERAGE_DEVIATION: jamie@56: case XTRACT_SKEWNESS: jamie@56: case XTRACT_KURTOSIS: jamie@56: case XTRACT_LOWEST_VALUE: jamie@56: case XTRACT_HIGHEST_VALUE: jamie@56: case XTRACT_SUM: jamie@56: case XTRACT_ZCR: jamie@56: case XTRACT_PEAK_SPECTRUM: jamie@56: case XTRACT_TRISTIMULUS_1: jamie@56: case XTRACT_TRISTIMULUS_2: jamie@56: case XTRACT_TRISTIMULUS_3: jamie@56: case XTRACT_DCT: jamie@56: case XTRACT_AMDF: jamie@56: case XTRACT_ASDF: jamie@56: case XTRACT_IRREGULARITY_K: jamie@56: case XTRACT_IRREGULARITY_J: jamie@56: case XTRACT_ATTACK_TIME: jamie@56: case XTRACT_DECAY_TIME: jamie@56: case XTRACT_DELTA_FEATURE: jamie@56: case XTRACT_FLUX: jamie@56: case XTRACT_F0: jamie@56: case XTRACT_FAILSAFE_F0: jamie@56: case XTRACT_MFCC: jamie@56: case XTRACT_AUTOCORRELATION: jamie@56: case XTRACT_AUTOCORRELATION_FFT: jamie@56: case XTRACT_ROLLOFF: jamie@56: case XTRACT_NOISINESS: jamie@56: case XTRACT_CREST: jamie@56: case XTRACT_FLATNESS: jamie@56: case XTRACT_POWER: jamie@56: case XTRACT_BARK_COEFFICIENTS: jamie@56: case XTRACT_RMS_AMPLITUDE: jamie@56: case XTRACT_SMOOTHNESS: jamie@56: case XTRACT_SPREAD: jamie@56: case XTRACT_SHARPNESS: jamie@56: case XTRACT_HPS: jamie@56: case XTRACT_SPECTRUM: jamie@56: case XTRACT_TONALITY: jamie@56: case XTRACT_LOUDNESS: jamie@59: case XTRACT_NONZERO_COUNT: jamie@104: case XTRACT_LPC: jamie@104: case XTRACT_LPCC: jamie@56: *data_unit = XTRACT_ANY; jamie@55: break; jamie@56: case XTRACT_SPECTRAL_MEAN: jamie@56: case XTRACT_SPECTRAL_VARIANCE: jamie@56: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@56: case XTRACT_SPECTRAL_AVERAGE_DEVIATION: jamie@56: case XTRACT_SPECTRAL_SKEWNESS: jamie@56: case XTRACT_SPECTRAL_KURTOSIS: jamie@56: case XTRACT_SPECTRAL_CENTROID: jamie@56: case XTRACT_SPECTRAL_SLOPE: jamie@56: case XTRACT_HARMONIC_SPECTRUM: jamie@56: case XTRACT_SPECTRAL_INHARMONICITY: jamie@56: *data_unit = XTRACT_ANY_AMPLITUDE_HERTZ; jamie@55: break; jamie@56: case XTRACT_ODD_EVEN_RATIO: jamie@56: *data_unit = XTRACT_HERTZ; jamie@55: break; jamie@55: } jamie@55: jamie@50: name = d->algo.name; jamie@51: p_name = d->algo.p_name; jamie@51: desc = d->algo.desc; jamie@51: p_desc = d->algo.p_desc; jamie@51: author = d->algo.author; jamie@51: year = &d->algo.year; jamie@51: jamie@60: strcpy(author, ""); jamie@51: *year = 0; jamie@51: jamie@50: switch(f){ jamie@56: case XTRACT_MEAN: jamie@50: strcpy(name, "mean"); jamie@52: strcpy(p_name, "Mean"); jamie@51: strcpy(desc, "Extract the mean of an input vector"); jamie@52: strcpy(p_desc, "Extract the mean of a range of values"); jamie@51: strcpy(author, ""); jamie@56: d->argv.type = XTRACT_NONE; jamie@50: break; jamie@56: case XTRACT_VARIANCE: jamie@50: strcpy(name, "variance"); jamie@51: strcpy(p_name, "Variance"); jamie@51: strcpy(desc, "Extract the variance of an input vector"); jamie@52: strcpy(p_desc, "Extract the variance of a range of values"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_STANDARD_DEVIATION: jamie@50: strcpy(name, "standard_deviation"); jamie@51: strcpy(p_name, "Standard Deviation"); jamie@52: strcpy(desc, jamie@52: "Extract the standard deviation of an input vector"); jamie@52: strcpy(p_desc, jamie@52: "Extract the standard deviation of a range of values"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_AVERAGE_DEVIATION: jamie@50: strcpy(name, "average_deviation"); jamie@51: strcpy(p_name, "Average Deviation"); jamie@52: strcpy(desc, jamie@52: "Extract the average deviation of an input vector"); jamie@52: strcpy(p_desc, jamie@52: "Extract the average deviation of a range of values"); jamie@52: strcpy(author, ""); jamie@52: break; jamie@59: case XTRACT_SKEWNESS: jamie@59: strcpy(name, "skewness"); jamie@59: strcpy(p_name, "Skewness"); jamie@59: strcpy(desc, jamie@59: "Extract the skewness of an input vector"); jamie@59: strcpy(p_desc, jamie@59: "Extract the skewness of a range of values"); jamie@59: strcpy(author, ""); jamie@59: break; jamie@59: case XTRACT_KURTOSIS: jamie@59: strcpy(name, "kurtosis"); jamie@59: strcpy(p_name, "Kurtosis"); jamie@59: strcpy(desc, jamie@59: "Extract the kurtosis of an input vector"); jamie@59: strcpy(p_desc, jamie@59: "Extract the kurtosis of a range of values"); jamie@59: strcpy(author, ""); jamie@59: break; jamie@56: case XTRACT_SPECTRAL_MEAN: jamie@52: strcpy(name, "spectral_mean"); jamie@52: strcpy(p_name, "Spectral Mean"); jamie@52: strcpy(desc, "Extract the mean of an input spectrum"); jamie@52: strcpy(p_desc, "Extract the mean of an audio spectrum"); jamie@52: strcpy(author, ""); jamie@52: break; jamie@56: case XTRACT_SPECTRAL_VARIANCE: jamie@52: strcpy(name, "spectral_variance"); jamie@52: strcpy(p_name, "Spectral Variance"); jamie@52: strcpy(desc, "Extract the variance of an input spectrum"); jamie@52: strcpy(p_desc, "Extract the variance of an audio spectrum"); jamie@52: strcpy(author, ""); jamie@52: break; jamie@56: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@52: strcpy(name, "spectral_standard_deviation"); jamie@52: strcpy(p_name, "Spectral Standard Deviation"); jamie@52: strcpy(desc, jamie@52: "Extract the standard deviation of an input spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the standard deviation of an audio spectrum"); jamie@52: strcpy(author, ""); jamie@52: break; jamie@56: case XTRACT_SPECTRAL_AVERAGE_DEVIATION: jamie@52: strcpy(name, "spectral_average_deviation"); jamie@52: strcpy(p_name, "Spectral Average Deviation"); jamie@52: strcpy(desc, jamie@52: "Extract the average deviation of an input spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the average deviation of an audio spectrum"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_ROLLOFF: jamie@52: strcpy(name, "spectral_rolloff"); jamie@51: strcpy(p_name, "Spectral Rolloff"); jamie@52: strcpy(desc, jamie@52: "Extract the rolloff point of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the rolloff point of an audio spectrum"); jamie@52: strcpy(author, "Bee Suan Ong"); jamie@52: *year = 2005; jamie@50: break; jamie@56: case XTRACT_SPECTRAL_INHARMONICITY: jamie@52: strcpy(name, "spectral_inharmonicity"); jamie@51: strcpy(p_name, "Inharmonicity"); jamie@51: strcpy(desc, "Extract the inharmonicity of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the inharmonicity of an audio spectrum"); jamie@50: break; jamie@56: case XTRACT_SPECTRUM: jamie@54: strcpy(name, "spectrum"); jamie@54: strcpy(p_name, "Spectrum"); jamie@52: strcpy(desc, jamie@54: "Extract the spectrum of an input vector"); jamie@52: strcpy(p_desc, jamie@54: "Extract the spectrum of an audio signal"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_ODD_EVEN_RATIO: jamie@50: strcpy(name, "odd_even_ratio"); jamie@51: strcpy(p_name, "Odd/Even Harmonic Ratio"); jamie@52: strcpy(desc, jamie@52: "Extract the odd-to-even harmonic ratio of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the odd-to-even harmonic ratio of an audio spectrum"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_LOWEST_VALUE: jamie@50: strcpy(name, "lowest_value"); jamie@51: strcpy(p_name, "Lowest Value"); jamie@51: strcpy(desc, "Extract the lowest value from an input vector"); jamie@51: strcpy(p_desc, "Extract the lowest value from a given range"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_F0: jamie@50: strcpy(name, "f0"); jamie@51: strcpy(p_name, "Fundamental Frequency"); jamie@51: strcpy(desc, "Extract the fundamental frequency of a signal"); jamie@52: strcpy(p_desc, jamie@52: "Extract the fundamental frequency of an audio signal"); jamie@59: strcpy(author, "Jamie Bullock"); jamie@50: break; jamie@56: case XTRACT_FAILSAFE_F0: jamie@50: strcpy(name, "failsafe_f0"); jamie@51: strcpy(p_name, "Fundamental Frequency (failsafe)"); jamie@59: strcpy(desc, "Extract the fundamental frequency of a signal (failsafe)"); jamie@52: strcpy(p_desc, jamie@59: "Extract the fundamental frequency of an audio signal (failsafe)"); jamie@59: strcpy(author, "Jamie Bullock"); jamie@50: break; jamie@56: case XTRACT_TONALITY: jamie@50: strcpy(name, "tonality"); jamie@51: strcpy(p_name, "Tonality"); jamie@51: strcpy(desc, "Extract the tonality of a spectrum"); jamie@51: strcpy(p_desc, "Extract the tonality an audio spectrum"); jamie@59: strcpy(author, "J. D. Johnston"); jamie@59: *year = 1988; jamie@50: break; jamie@56: case XTRACT_SPECTRAL_SKEWNESS: jamie@52: strcpy(name, "spectral_skewness"); jamie@51: strcpy(p_name, "Spectral Skewness"); jamie@52: strcpy(desc, "Extract the skewness of an input spectrum"); jamie@51: strcpy(p_desc, "Extract the skewness of an audio spectrum"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_SPECTRAL_KURTOSIS: jamie@52: strcpy(name, "spectral_kurtosis"); jamie@51: strcpy(p_name, "Spectral Kurtosis"); jamie@52: strcpy(desc, "Extract the kurtosis of an input spectrum"); jamie@51: strcpy(p_desc, "Extract the kurtosis of an audio spectrum"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_PEAK_SPECTRUM: jamie@52: strcpy(name, "peak_spectrum"); jamie@52: strcpy(p_name, "Peak Spectrum"); jamie@51: strcpy(desc, "Extract the spectral peaks from of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the spectral peaks from an audio spectrum"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_HARMONIC_SPECTRUM: jamie@60: strcpy(name, "harmonic_spectrum"); jamie@52: strcpy(p_name, "Harmonic Spectrum"); jamie@51: strcpy(desc, "Extract the harmonics from a spectrum"); jamie@51: strcpy(p_desc, "Extract the harmonics from an audio spectrum"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_NOISINESS: jamie@50: strcpy(name, "noisiness"); jamie@51: strcpy(p_name, "Noisiness"); jamie@51: strcpy(desc, "Extract the noisiness of a spectrum"); jamie@51: strcpy(p_desc, "Extract the noisiness of an audio spectrum"); jamie@52: strcpy(author, "Tae Hong Park"); jamie@52: *year = 2000; jamie@50: break; jamie@56: case XTRACT_CREST: jamie@50: strcpy(name, "crest"); jamie@51: strcpy(p_name, "Spectral Crest Measure"); jamie@52: strcpy(desc, jamie@52: "Extract the spectral crest measure of a spectrum"); jamie@52: strcpy(p_desc, jamie@60: "Extract the spectral crest measure of an audio spectrum"); jamie@52: strcpy(author, "Peeters"); jamie@52: *year = 2003; jamie@50: break; jamie@56: case XTRACT_MFCC: jamie@50: strcpy(name, "mfcc"); jamie@52: strcpy(p_name, "Mel-Frequency Cepstral Coefficients"); jamie@51: strcpy(desc, "Extract MFCC from a spectrum"); jamie@51: strcpy(p_desc, "Extract MFCC from an audio spectrum"); jamie@52: strcpy(author, "Rabiner"); jamie@104: break; jamie@104: case XTRACT_LPC: jamie@104: strcpy(name, "lpc"); jamie@104: strcpy(p_name, "Linear predictive coding coefficients"); jamie@104: strcpy(desc, "Extract LPC from autocorrelation coefficients"); jamie@104: strcpy(p_desc, jamie@104: "Extract LPC from autocorrelation coefficients"); jamie@104: strcpy(author, jamie@104: "Rabiner and Juang as implemented by Jutta Degener"); jamie@104: *year = 1994; jamie@104: break; jamie@104: case XTRACT_LPCC: jamie@104: strcpy(name, "lpcc"); jamie@104: strcpy(p_name, "Linear predictive coding cepstral coefficients"); jamie@104: strcpy(desc, "Extract LPC cepstrum from LPC coefficients"); jamie@104: strcpy(p_desc, jamie@104: "Extract LPC cepstrum from LPC coefficients"); jamie@104: strcpy(author, "Rabiner and Juang"); jamie@104: *year = 1993; jamie@50: break; jamie@56: case XTRACT_BARK_COEFFICIENTS: jamie@50: strcpy(name, "bark_coefficients"); jamie@51: strcpy(p_name, "Bark Coefficients"); jamie@51: strcpy(desc, "Extract bark coefficients from a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract bark coefficients from an audio spectrum"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_SPECTRAL_CENTROID: jamie@52: strcpy(name, "spectral_centroid"); jamie@51: strcpy(p_name, "Spectral Centroid"); jamie@51: strcpy(desc, "Extract the spectral centroid of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the spectral centroid of an audio spectrum"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_IRREGULARITY_K: jamie@50: strcpy(name, "irregularity_k"); jamie@51: strcpy(p_name, "Irregularity I"); jamie@59: strcpy(desc, "Extract the irregularity (type I) of a spectrum"); jamie@52: strcpy(p_desc, jamie@59: "Extract the irregularity (type I) of an audio spectrum"); jamie@52: strcpy(author, "Krimphoff"); jamie@52: *year = 1994; jamie@50: break; jamie@56: case XTRACT_IRREGULARITY_J: jamie@50: strcpy(name, "irregularity_j"); jamie@51: strcpy(p_name, "Irregularity II"); jamie@59: strcpy(desc, "Extract the irregularity (type II) of a spectrum"); jamie@52: strcpy(p_desc, jamie@59: "Extract the irregularity (type II) of an audio spectrum"); jamie@52: strcpy(author, "Jensen"); jamie@52: *year = 1999; jamie@50: break; jamie@56: case XTRACT_TRISTIMULUS_1: jamie@50: strcpy(name, "tristimulus_1"); jamie@51: strcpy(p_name, "Tristimulus I"); jamie@51: strcpy(desc, "Extract the tristimulus (type I) of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the tristimulus (type I) of an audio spectrum"); jamie@52: strcpy(author, "Pollard and Jansson"); jamie@52: *year = 1982; jamie@50: break; jamie@56: case XTRACT_TRISTIMULUS_2: jamie@50: strcpy(name, "tristimulus_2"); jamie@51: strcpy(p_name, "Tristimulus II"); jamie@51: strcpy(desc, "Extract the tristimulus (type II) of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the tristimulus (type II) of an audio spectrum"); jamie@52: strcpy(author, "Pollard and Jansson"); jamie@52: *year = 1982; jamie@50: break; jamie@56: case XTRACT_TRISTIMULUS_3: jamie@50: strcpy(name, "tristimulus_3"); jamie@51: strcpy(p_name, "Tristimulus III"); jamie@52: strcpy(desc, jamie@52: "Extract the tristimulus (type III) of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the tristimulus (type III) of an audio spectrum"); jamie@52: strcpy(author, "Pollard and Jansson"); jamie@52: *year = 1982; jamie@50: break; jamie@56: case XTRACT_SMOOTHNESS: jamie@50: strcpy(name, "smoothness"); jamie@51: strcpy(p_name, "Spectral Smoothness"); jamie@51: strcpy(desc, "Extract the spectral smoothness of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the spectral smoothness of an audio spectrum"); jamie@52: strcpy(author, "McAdams"); jamie@52: *year = 1999; jamie@50: break; jamie@56: case XTRACT_FLATNESS: jamie@50: strcpy(name, "flatness"); jamie@51: strcpy(p_name, "Spectral Flatness"); jamie@51: strcpy(desc, "Extract the spectral flatness of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the spectral flatness of an audio spectrum"); jamie@52: strcpy(author, "Tristan Jehan"); jamie@52: *year = 2005; jamie@50: break; jamie@56: case XTRACT_SPREAD: jamie@50: strcpy(name, "spread"); jamie@51: strcpy(p_name, "Spectral Spread"); jamie@51: strcpy(desc, "Extract the spectral spread of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the spectral spread of an audio spectrum"); jamie@52: strcpy(author, "Norman Casagrande"); jamie@52: *year = 2005; jamie@50: break; jamie@56: case XTRACT_ZCR: jamie@50: strcpy(name, "zcr"); jamie@51: strcpy(p_name, "Zero Crossing Rate"); jamie@51: strcpy(desc, "Extract the zero crossing rate of a vector"); jamie@52: strcpy(p_desc, jamie@52: "Extract the zero crossing rate of an audio signal"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_LOUDNESS: jamie@50: strcpy(name, "loudness"); jamie@51: strcpy(p_name, "Loudness"); jamie@52: strcpy(desc, jamie@52: "Extract the loudness of a signal from its spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the loudness of an audio signal from its spectrum"); jamie@52: strcpy(author, "Moore, Glasberg et al"); jamie@52: *year = 2005; jamie@50: break; jamie@56: case XTRACT_HIGHEST_VALUE: jamie@50: strcpy(name, "highest_value"); jamie@51: strcpy(p_name, "Highest Value"); jamie@51: strcpy(desc, "Extract the highest value from an input vector"); jamie@51: strcpy(p_desc, "Extract the highest value from a given range"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_SUM: jamie@50: strcpy(name, "sum"); jamie@51: strcpy(p_name, "Sum of Values"); jamie@52: strcpy(desc, jamie@52: "Extract the sum of the values in an input vector"); jamie@52: strcpy(p_desc, jamie@52: "Extract the sum of the values in a given range"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_RMS_AMPLITUDE: jamie@50: strcpy(name, "rms_amplitude"); jamie@51: strcpy(p_name, "RMS Amplitude"); jamie@51: strcpy(desc, "Extract the RMS amplitude of a signal"); jamie@51: strcpy(p_desc, "Extract the RMS amplitude of an audio signal"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_POWER: jamie@50: strcpy(name, "power"); jamie@51: strcpy(p_name, "Spectral Power"); jamie@51: strcpy(desc, "Extract the spectral power of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the spectral power of an audio spectrum"); jamie@52: strcpy(author, "Bee Suan Ong"); jamie@52: *year = 2005; jamie@50: break; jamie@56: case XTRACT_SHARPNESS: jamie@50: strcpy(name, "sharpness"); jamie@51: strcpy(p_name, "Spectral Sharpness"); jamie@51: strcpy(desc, "Extract the spectral sharpness of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the spectral sharpness of an audio spectrum"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_SPECTRAL_SLOPE: jamie@52: strcpy(name, "spectral_slope"); jamie@51: strcpy(p_name, "Spectral Slope"); jamie@51: strcpy(desc, "Extract the spectral slope of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the spectral slope of an audio spectrum"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_HPS: jamie@50: strcpy(name, "hps"); jamie@51: strcpy(p_name, "Harmonic Product Spectrum"); jamie@52: strcpy(desc, jamie@52: "Extract the harmonic product spectrum of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the harmonic product spectrum of an audio spectrum"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_FLUX: jamie@50: strcpy(name, "flux"); jamie@51: strcpy(p_name, "Spectral Flux"); jamie@51: strcpy(desc, "Extract the spectral flux of a spectrum"); jamie@52: strcpy(p_desc, jamie@52: "Extract the spectral flux of an audio spectrum"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_ATTACK_TIME: jamie@50: strcpy(name, "attack_time"); jamie@51: strcpy(p_name, "Attack Time"); jamie@51: strcpy(desc, "Extract the attack time of a signal"); jamie@51: strcpy(p_desc, "Extract the attack time of an audio signal"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_DECAY_TIME: jamie@50: strcpy(name, "decay_time"); jamie@51: strcpy(p_name, "Decay Time"); jamie@51: strcpy(desc, "Extract the decay time of a signal"); jamie@51: strcpy(p_desc, "Extract the decay time of an audio signal"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_DELTA_FEATURE: jamie@50: strcpy(name, "delta_feature"); jamie@51: strcpy(p_name, "Delta Feature"); jamie@51: strcpy(desc, "Extract the time derivative of a feature"); jamie@51: strcpy(p_desc, "Extract the time derivative of a feature"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_AUTOCORRELATION_FFT: jamie@50: strcpy(name, "autocorrelation_fft"); jamie@51: strcpy(p_name, "Autocorrelation (FFT method)"); jamie@59: strcpy(desc, "Extract the autocorrelation of a signal (fft method)"); jamie@59: strcpy(p_desc, "Extract the autocorrelation of an audio signal (fft method)"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_DCT: jamie@50: strcpy(name, "dct"); jamie@51: strcpy(p_name, "Discrete Cosine Transform"); jamie@51: strcpy(desc, "Extract the DCT of a signal"); jamie@51: strcpy(p_desc, "Extract the DCT of an audio signal"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_AUTOCORRELATION: jamie@50: strcpy(name, "autocorrelation"); jamie@51: strcpy(p_name, "Autocorrelation"); jamie@51: strcpy(desc, "Extract the autocorrelation of a signal"); jamie@52: strcpy(p_desc, jamie@52: "Extract the autocorrelation of an audio signal"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_AMDF: jamie@50: strcpy(name, "amdf"); jamie@51: strcpy(p_name, "Average Magnitude Difference Function"); jamie@51: strcpy(desc, "Extract the AMDF of a signal"); jamie@51: strcpy(p_desc, "Extract the AMDF of an audio signal"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@56: case XTRACT_ASDF: jamie@50: strcpy(name, "asdf"); jamie@51: strcpy(p_name, "Average Squared Difference Function"); jamie@51: strcpy(desc, "Extract the ASDF of a signal"); jamie@51: strcpy(p_desc, "Extract the ASDF of an audio signal"); jamie@51: strcpy(author, ""); jamie@50: break; jamie@59: case XTRACT_NONZERO_COUNT: jamie@59: strcpy(name, "nonzero_count"); jamie@59: strcpy(p_name, "Non-zero count"); jamie@59: strcpy(desc, "Extract the number of non-zero elements in the input vector"); jamie@59: strcpy(p_desc, "Extract the number of non-zero elements in an input spectrum"); jamie@59: strcpy(author, ""); jamie@59: break; jamie@50: default: jamie@51: strcpy(name, ""); jamie@52: strcpy(p_name, ""); jamie@51: strcpy(desc, ""); jamie@51: strcpy(p_desc, ""); jamie@51: strcpy(author, ""); jamie@50: break; jamie@50: } jamie@55: jamie@55: jamie@55: switch(f){ jamie@55: jamie@56: case XTRACT_VARIANCE: jamie@56: case XTRACT_STANDARD_DEVIATION: jamie@56: case XTRACT_AVERAGE_DEVIATION: jamie@56: case XTRACT_SPECTRAL_VARIANCE: jamie@56: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@56: case XTRACT_SPECTRAL_AVERAGE_DEVIATION: jamie@56: case XTRACT_SPECTRAL_INHARMONICITY: jamie@56: case XTRACT_LOWEST_VALUE: jamie@56: case XTRACT_F0: jamie@56: case XTRACT_FAILSAFE_F0: jamie@56: case XTRACT_TONALITY: jamie@55: *argc = 1; jamie@56: *argv_type = XTRACT_FLOAT; jamie@55: break; jamie@56: case XTRACT_SKEWNESS: jamie@56: case XTRACT_KURTOSIS: jamie@56: case XTRACT_SPECTRAL_SKEWNESS: jamie@56: case XTRACT_SPECTRAL_KURTOSIS: jamie@56: case XTRACT_SPECTRUM: jamie@56: case XTRACT_PEAK_SPECTRUM: jamie@56: case XTRACT_HARMONIC_SPECTRUM: jamie@56: case XTRACT_NOISINESS: jamie@56: case XTRACT_CREST: jamie@56: case XTRACT_ROLLOFF: jamie@55: *argc = 2; jamie@56: *argv_type = XTRACT_FLOAT; jamie@55: break; jamie@56: case XTRACT_MFCC: jamie@55: *argc = 1; jamie@56: *argv_type = XTRACT_MEL_FILTER; jamie@55: break; jamie@104: case XTRACT_LPCC: jamie@104: *argc = 1; jamie@104: *argv_type = XTRACT_INT; jamie@104: break; jamie@56: case XTRACT_BARK_COEFFICIENTS: jamie@56: *argc = XTRACT_BARK_BANDS; jamie@56: *argv_type = XTRACT_INT; jamie@55: break; jamie@56: case XTRACT_MEAN: jamie@56: case XTRACT_SPECTRAL_MEAN: jamie@56: case XTRACT_SPECTRAL_CENTROID: jamie@56: case XTRACT_IRREGULARITY_K: jamie@56: case XTRACT_IRREGULARITY_J: jamie@56: case XTRACT_TRISTIMULUS_1: jamie@56: case XTRACT_TRISTIMULUS_2: jamie@56: case XTRACT_TRISTIMULUS_3: jamie@56: case XTRACT_SMOOTHNESS: jamie@56: case XTRACT_FLATNESS: jamie@56: case XTRACT_SPREAD: jamie@56: case XTRACT_ZCR: jamie@56: case XTRACT_LOUDNESS: jamie@56: case XTRACT_HIGHEST_VALUE: jamie@56: case XTRACT_SUM: jamie@56: case XTRACT_RMS_AMPLITUDE: jamie@56: case XTRACT_POWER: jamie@56: case XTRACT_SHARPNESS: jamie@56: case XTRACT_SPECTRAL_SLOPE: jamie@56: case XTRACT_HPS: jamie@56: case XTRACT_FLUX: jamie@56: case XTRACT_ATTACK_TIME: jamie@56: case XTRACT_DECAY_TIME: jamie@56: case XTRACT_DELTA_FEATURE: jamie@56: case XTRACT_AUTOCORRELATION_FFT: jamie@56: case XTRACT_DCT: jamie@56: case XTRACT_AUTOCORRELATION: jamie@56: case XTRACT_AMDF: jamie@56: case XTRACT_ASDF: jamie@59: case XTRACT_NONZERO_COUNT: jamie@59: case XTRACT_ODD_EVEN_RATIO: jamie@104: case XTRACT_LPC: jamie@55: default: jamie@55: *argc = 0; jamie@55: break; jamie@55: } jamie@55: jamie@55: is_scalar = &d->is_scalar; jamie@55: jamie@55: switch(f){ jamie@56: case XTRACT_MEAN: jamie@56: case XTRACT_VARIANCE: jamie@56: case XTRACT_STANDARD_DEVIATION: jamie@56: case XTRACT_AVERAGE_DEVIATION: jamie@56: case XTRACT_SKEWNESS: jamie@56: case XTRACT_KURTOSIS: jamie@56: case XTRACT_SPECTRAL_MEAN: jamie@56: case XTRACT_SPECTRAL_VARIANCE: jamie@56: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@56: case XTRACT_SPECTRAL_AVERAGE_DEVIATION: jamie@56: case XTRACT_SPECTRAL_SKEWNESS: jamie@56: case XTRACT_SPECTRAL_KURTOSIS: jamie@56: case XTRACT_SPECTRAL_CENTROID: jamie@56: case XTRACT_IRREGULARITY_K: jamie@56: case XTRACT_IRREGULARITY_J: jamie@56: case XTRACT_TRISTIMULUS_1: jamie@56: case XTRACT_TRISTIMULUS_2: jamie@56: case XTRACT_TRISTIMULUS_3: jamie@56: case XTRACT_SMOOTHNESS: jamie@56: case XTRACT_SPREAD: jamie@56: case XTRACT_ZCR: jamie@56: case XTRACT_ROLLOFF: jamie@56: case XTRACT_LOUDNESS: jamie@56: case XTRACT_FLATNESS: jamie@56: case XTRACT_TONALITY: jamie@56: case XTRACT_CREST: jamie@56: case XTRACT_NOISINESS: jamie@56: case XTRACT_RMS_AMPLITUDE: jamie@56: case XTRACT_SPECTRAL_INHARMONICITY: jamie@56: case XTRACT_POWER: jamie@56: case XTRACT_ODD_EVEN_RATIO: jamie@56: case XTRACT_SHARPNESS: jamie@56: case XTRACT_SPECTRAL_SLOPE: jamie@56: case XTRACT_LOWEST_VALUE: jamie@56: case XTRACT_HIGHEST_VALUE: jamie@56: case XTRACT_SUM: jamie@56: case XTRACT_HPS: jamie@56: case XTRACT_F0: jamie@56: case XTRACT_FAILSAFE_F0: jamie@59: case XTRACT_NONZERO_COUNT: jamie@56: *is_scalar = XTRACT_TRUE; jamie@55: break; jamie@56: case XTRACT_AUTOCORRELATION: jamie@56: case XTRACT_AMDF: jamie@56: case XTRACT_ASDF: jamie@56: case XTRACT_BARK_COEFFICIENTS: jamie@56: case XTRACT_PEAK_SPECTRUM: jamie@56: case XTRACT_SPECTRUM: jamie@56: case XTRACT_AUTOCORRELATION_FFT: jamie@56: case XTRACT_MFCC: jamie@104: case XTRACT_LPC: jamie@104: case XTRACT_LPCC: jamie@56: case XTRACT_DCT: jamie@56: case XTRACT_HARMONIC_SPECTRUM: jamie@56: *is_scalar = XTRACT_FALSE; jamie@55: break; jamie@55: default: jamie@56: *is_scalar = XTRACT_TRUE; jamie@55: break; jamie@55: jamie@55: } jamie@55: jamie@55: if(*is_scalar){ jamie@55: jamie@55: result_unit = &d->result.scalar.unit; jamie@55: result_min = &d->result.scalar.min; jamie@55: result_max = &d->result.scalar.max; jamie@55: jamie@55: switch(f){ jamie@56: case XTRACT_MEAN: jamie@56: case XTRACT_VARIANCE: jamie@56: case XTRACT_STANDARD_DEVIATION: jamie@56: case XTRACT_AVERAGE_DEVIATION: jamie@56: case XTRACT_SKEWNESS: jamie@56: case XTRACT_KURTOSIS: jamie@56: case XTRACT_RMS_AMPLITUDE: jamie@56: case XTRACT_LOWEST_VALUE: jamie@56: case XTRACT_HIGHEST_VALUE: jamie@56: case XTRACT_SUM: jamie@59: case XTRACT_NONZERO_COUNT: jamie@56: *result_unit = XTRACT_ANY; jamie@56: *result_min = XTRACT_ANY; jamie@56: *result_max = XTRACT_ANY; jamie@55: break; jamie@56: case XTRACT_SPECTRAL_SKEWNESS: jamie@56: case XTRACT_SPECTRAL_KURTOSIS: jamie@56: case XTRACT_IRREGULARITY_K: jamie@56: case XTRACT_IRREGULARITY_J: jamie@56: case XTRACT_TRISTIMULUS_1: jamie@56: case XTRACT_TRISTIMULUS_2: jamie@56: case XTRACT_TRISTIMULUS_3: jamie@56: case XTRACT_NOISINESS: jamie@56: case XTRACT_SMOOTHNESS: jamie@56: *result_unit = XTRACT_NONE; jamie@56: *result_min = XTRACT_ANY; /* FIX: need to check these */ jamie@56: *result_max = XTRACT_ANY; jamie@55: break; jamie@56: case XTRACT_SPECTRAL_MEAN: jamie@56: case XTRACT_SPECTRAL_VARIANCE: jamie@56: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@56: case XTRACT_SPECTRAL_AVERAGE_DEVIATION: jamie@56: case XTRACT_SPECTRAL_CENTROID: jamie@56: case XTRACT_SPREAD: jamie@56: case XTRACT_F0: jamie@56: case XTRACT_FAILSAFE_F0: jamie@56: case XTRACT_HPS: jamie@56: case XTRACT_ROLLOFF: jamie@56: *result_unit = XTRACT_HERTZ; jamie@55: *result_min = 0.f; jamie@56: *result_max = XTRACT_SR_UPPER_LIMIT / 2; jamie@104: break; jamie@56: case XTRACT_ZCR: jamie@56: *result_unit = XTRACT_HERTZ; jamie@55: *result_min = 0.f; jamie@56: *result_max = XTRACT_ANY; jamie@104: break; jamie@56: case XTRACT_ODD_EVEN_RATIO: jamie@56: *result_unit = XTRACT_NONE; jamie@55: *result_min = 0.f; jamie@55: *result_max = 1.f; jamie@104: break; jamie@56: case XTRACT_LOUDNESS: jamie@56: case XTRACT_FLATNESS: jamie@56: case XTRACT_TONALITY: jamie@56: case XTRACT_CREST: jamie@56: case XTRACT_SPECTRAL_INHARMONICITY: jamie@56: case XTRACT_POWER: jamie@56: case XTRACT_SHARPNESS: jamie@56: case XTRACT_SPECTRAL_SLOPE: jamie@104: case XTRACT_LPC: jamie@104: case XTRACT_LPCC: jamie@55: default: jamie@56: *result_unit = XTRACT_UNKNOWN; jamie@56: *result_min = XTRACT_UNKNOWN; jamie@56: *result_max = XTRACT_UNKNOWN; jamie@104: break; jamie@55: } jamie@55: } jamie@55: else { jamie@55: jamie@55: result_min = NULL; jamie@55: result_max = NULL; jamie@55: result_unit = &d->result.vector.unit; jamie@55: result_format = &d->result.vector.format; jamie@55: jamie@55: switch(f) { jamie@56: case XTRACT_AUTOCORRELATION: jamie@56: case XTRACT_AMDF: jamie@56: case XTRACT_ASDF: jamie@56: case XTRACT_DCT: jamie@56: *result_format = XTRACT_ARBITRARY_SERIES; jamie@56: *result_unit = XTRACT_ANY; jamie@104: break; jamie@56: case XTRACT_BARK_COEFFICIENTS: jamie@56: *result_format = XTRACT_BARK_COEFFS; jamie@56: *result_unit = XTRACT_UNKNOWN; /* FIX: check */ jamie@104: break; jamie@56: case XTRACT_PEAK_SPECTRUM: jamie@56: case XTRACT_SPECTRUM: jamie@56: case XTRACT_HARMONIC_SPECTRUM: jamie@56: *result_format = XTRACT_SPECTRAL; jamie@56: *result_unit = XTRACT_ANY_AMPLITUDE_HERTZ; jamie@104: break; jamie@56: case XTRACT_AUTOCORRELATION_FFT: jamie@104: break; jamie@56: case XTRACT_MFCC: jamie@56: *result_format = XTRACT_MEL_COEFFS; jamie@56: *result_unit = XTRACT_UNKNOWN; /* FIX: check */ jamie@104: break; jamie@104: case XTRACT_LPC: jamie@104: *result_format = XTRACT_LPC_COEFFS; jamie@104: *result_unit = XTRACT_UNKNOWN; jamie@104: break; jamie@104: case XTRACT_LPCC: jamie@104: *result_format = XTRACT_LPCC_COEFFS; jamie@104: *result_unit = XTRACT_UNKNOWN; jamie@104: break; jamie@55: default: jamie@55: break; jamie@55: } jamie@55: } jamie@50: } jamie@50: jamie@50: return fd; jamie@50: } jamie@50: jamie@50: int xtract_free_descriptors(void *fd){ jamie@50: jamie@50: if (fd != NULL) { jamie@50: free(fd); jamie@50: } jamie@50: jamie@56: return XTRACT_SUCCESS; jamie@50: } jamie@50: jamie@50: jamie@50: jamie@50: jamie@50: