jamie@141: /* jamie@141: * Copyright (C) 2012 Jamie Bullock jamie@140: * jamie@141: * Permission is hereby granted, free of charge, to any person obtaining a copy jamie@141: * of this software and associated documentation files (the "Software"), to jamie@141: * deal in the Software without restriction, including without limitation the jamie@141: * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or jamie@141: * sell copies of the Software, and to permit persons to whom the Software is jamie@141: * furnished to do so, subject to the following conditions: jamie@50: * jamie@141: * The above copyright notice and this permission notice shall be included in jamie@141: * all copies or substantial portions of the Software. jamie@50: * jamie@141: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR jamie@141: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, jamie@141: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE jamie@141: * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER jamie@141: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING jamie@141: * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS jamie@141: * IN THE SOFTWARE. jamie@50: * jamie@50: */ jamie@50: jamie@259: #include "xtract/libxtract.h" jamie@56: #include "xtract_macros_private.h" jamie@50: #include jamie@50: #include jamie@50: #define XTRACT jamie@50: jamie@140: xtract_function_descriptor_t *xtract_make_descriptors(void) jamie@140: { jamie@52: jamie@50: int f , F; jamie@140: char *name, *p_name, *desc, *p_desc, *author; jamie@146: double *argv_min, *argv_max, *argv_def, *result_min, *result_max; jamie@56: int *argc, *year, *argv_donor; jamie@140: xtract_vector_t *data_format, *result_format; jamie@56: xtract_unit_t *data_unit, *argv_unit, *result_unit; jamie@108: xtract_bool_t *is_scalar, *is_delta; 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: andrea@211: fd = (xtract_function_descriptor_t*)malloc(XTRACT_FEATURES * sizeof(xtract_function_descriptor_t)); jamie@50: jamie@55: /* FIX - this file probably needs a rewrite for readability */ jamie@51: jamie@140: while(f--) jamie@140: { jamie@51: jamie@108: d = &fd[f]; jamie@110: d->id = f; jamie@108: argc = &d->argc; jamie@108: argv_type = &d->argv.type; jamie@51: jamie@108: argv_min = &d->argv.min[0]; jamie@108: argv_max = &d->argv.max[0]; jamie@108: argv_def = &d->argv.def[0]; jamie@108: argv_unit = &d->argv.unit[0]; jamie@55: jamie@140: switch (f) jamie@140: { jamie@108: /* argc = 1 */ jamie@140: case XTRACT_VARIANCE: jamie@140: case XTRACT_SPECTRAL_VARIANCE: jamie@140: case XTRACT_STANDARD_DEVIATION: jamie@140: case XTRACT_DIFFERENCE_VECTOR: jamie@140: case XTRACT_AVERAGE_DEVIATION: jamie@140: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@123: /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */ jamie@140: case XTRACT_LOWEST_VALUE: jamie@140: case XTRACT_TONALITY: jamie@140: case XTRACT_MFCC: jamie@140: case XTRACT_LPC: jamie@140: case XTRACT_LPCC: jamie@140: *argv_min = XTRACT_ANY; jamie@140: *argv_max = XTRACT_ANY; jamie@140: *argv_def = XTRACT_ANY; jamie@140: *argv_unit = XTRACT_DBFS; jamie@140: break; jamie@140: case XTRACT_SPECTRAL_INHARMONICITY: jamie@146: *argv_min = 0.0; jamie@146: *argv_max = XTRACT_SR_UPPER_LIMIT / 2.0; jamie@140: *argv_def = XTRACT_FUNDAMENTAL_DEFAULT; jamie@140: *argv_unit = XTRACT_HERTZ; jamie@140: break; jamie@140: case XTRACT_F0: jamie@140: case XTRACT_FAILSAFE_F0: jamie@161: case XTRACT_WAVELET_F0: jamie@205: case XTRACT_MIDICENT: jamie@140: *argv_min = XTRACT_SR_LOWER_LIMIT; jamie@140: *argv_max = XTRACT_SR_UPPER_LIMIT; jamie@140: *argv_def = XTRACT_SR_DEFAULT; jamie@140: *argv_unit = XTRACT_HERTZ; jamie@140: break; jamie@140: case XTRACT_FLATNESS_DB: jamie@140: *argv_min = 0; jamie@140: *argv_max = 1.0; jamie@140: *argv_def = XTRACT_ANY; jamie@140: *argv_unit = XTRACT_DBFS; jamie@140: break; jamie@114: /* argc = 2 */; jamie@140: case XTRACT_ROLLOFF: jamie@140: *argv_min = XTRACT_FFT_BANDS_MIN; jamie@140: *argv_max = XTRACT_FFT_BANDS_MAX; jamie@140: *argv_def = XTRACT_SPEC_BW_DEF ; jamie@140: *argv_unit = XTRACT_HERTZ; jamie@146: *(argv_min + 1) = 0.0; jamie@146: *(argv_max + 1) = 100.0; jamie@146: *(argv_def + 1) = 95.0; jamie@140: *(argv_unit + 1) = XTRACT_PERCENT; jamie@140: break; jamie@140: case XTRACT_PEAK_SPECTRUM: jamie@146: *argv_min = XTRACT_SR_LOWER_LIMIT / 2.0; jamie@146: *argv_max = XTRACT_SR_UPPER_LIMIT / 2.0; jamie@146: *argv_def = XTRACT_SR_DEFAULT / 2.0; jamie@140: *argv_unit = XTRACT_HERTZ; jamie@146: *(argv_min + 1) = 0.0; jamie@146: *(argv_max + 1) = 100.0 ; jamie@146: *(argv_def + 1) = 10.0 ; jamie@140: *(argv_unit + 1) = XTRACT_PERCENT; jamie@140: break; jamie@140: case XTRACT_HARMONIC_SPECTRUM: jamie@146: *argv_min = 0.0; jamie@146: *argv_max = XTRACT_SR_UPPER_LIMIT / 2.0; jamie@140: *argv_def = XTRACT_FUNDAMENTAL_DEFAULT; jamie@140: *argv_unit = XTRACT_HERTZ; jamie@146: *(argv_min + 1) = 0.0; jamie@146: *(argv_max + 1) = 1.0 ; jamie@146: *(argv_def + 1) = .1 ; andrea@211: *(argv_unit + 1) = (xtract_unit_t)XTRACT_NONE; jamie@140: break; jamie@140: case XTRACT_NOISINESS: jamie@140: case XTRACT_SKEWNESS: jamie@140: case XTRACT_KURTOSIS: jamie@140: case XTRACT_SPECTRAL_SKEWNESS: jamie@140: case XTRACT_SPECTRAL_KURTOSIS: jamie@140: case XTRACT_CREST: jamie@140: *argv_min = XTRACT_NONE; jamie@140: *argv_max = XTRACT_NONE; jamie@140: *argv_def = XTRACT_NONE; andrea@211: *argv_unit = (xtract_unit_t)XTRACT_NONE; jamie@140: *(argv_min + 1) = XTRACT_NONE; jamie@140: *(argv_max + 1) = XTRACT_NONE; jamie@140: *(argv_def + 1) = XTRACT_NONE; andrea@211: *(argv_unit + 1) = (xtract_unit_t)XTRACT_NONE; jamie@140: break; jamie@114: /* argc = 4 */ jamie@140: case XTRACT_SPECTRUM: jamie@140: *argv_min = XTRACT_SR_LOWER_LIMIT / XTRACT_FFT_BANDS_MIN; jamie@140: *argv_max = XTRACT_SR_UPPER_LIMIT / XTRACT_FFT_BANDS_MAX; jamie@140: *argv_def = XTRACT_SR_DEFAULT / XTRACT_FFT_BANDS_DEF; jamie@140: *argv_unit = XTRACT_HERTZ; jamie@140: *(argv_min + 1) = 0; jamie@140: *(argv_max + 1) = 3 ; jamie@140: *(argv_def + 1) = 0; andrea@211: *(argv_unit + 1) = (xtract_unit_t)XTRACT_NONE; jamie@140: *(argv_min + 2) = 0; jamie@140: *(argv_max + 2) = 1; jamie@140: *(argv_def + 2) = 0; andrea@211: *(argv_unit + 2) = (xtract_unit_t)XTRACT_NONE; jamie@140: *(argv_min + 3) = 0; jamie@140: *(argv_max + 3) = 1; jamie@140: *(argv_def + 3) = 0; andrea@211: *(argv_unit + 3) = (xtract_unit_t)XTRACT_NONE; jamie@140: break; jamie@140: case XTRACT_SUBBANDS: jamie@140: *argv_min = XTRACT_ANY; jamie@140: *argv_max = XTRACT_ANY; jamie@140: *argv_def = XTRACT_MEAN; andrea@211: *argv_unit = (xtract_unit_t)XTRACT_NONE; jamie@140: *(argv_min + 1) = 1; jamie@140: *(argv_max + 1) = 16384; jamie@140: *(argv_def + 1) = 4; andrea@211: *(argv_unit + 1) = (xtract_unit_t)XTRACT_NONE; jamie@140: *(argv_min + 2) = 0; jamie@140: *(argv_max + 2) = 32; jamie@140: *(argv_def + 2) = 0; andrea@211: *(argv_unit + 2) = (xtract_unit_t)XTRACT_NONE; jamie@140: *(argv_min + 3) = 0; jamie@140: *(argv_max + 3) = XTRACT_ANY; jamie@140: *(argv_def + 3) = 0; jamie@140: *(argv_unit + 3) = XTRACT_BINS; jamie@140: break; jamie@140: case XTRACT_BARK_COEFFICIENTS: jamie@140: /* BARK_COEFFICIENTS is special because argc = BARK_BANDS */ jamie@140: case XTRACT_WINDOWED: jamie@140: /* WINDOWED is special because argc = window size = N */ jamie@140: default: jamie@140: *argv_min = XTRACT_NONE; jamie@140: *argv_max = XTRACT_NONE; jamie@140: *argv_def = XTRACT_NONE; andrea@211: *argv_unit = (xtract_unit_t)XTRACT_NONE; jamie@140: break; jamie@108: } jamie@55: jamie@108: argv_donor = &d->argv.donor[0]; jamie@55: jamie@140: switch (f) jamie@140: { jamie@108: /* argc = 1 */ jamie@140: case XTRACT_VARIANCE: jamie@140: *argv_donor = XTRACT_MEAN; jamie@140: break; jamie@140: case XTRACT_SPECTRAL_VARIANCE: jamie@140: *argv_donor = XTRACT_SPECTRAL_MEAN; jamie@140: break; jamie@140: case XTRACT_STANDARD_DEVIATION: jamie@140: *argv_donor = XTRACT_VARIANCE; jamie@140: break; jamie@140: case XTRACT_AVERAGE_DEVIATION: jamie@140: *argv_donor = XTRACT_MEAN; jamie@140: break; jamie@140: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@140: *argv_donor = XTRACT_SPECTRAL_VARIANCE; jamie@140: break; jamie@123: /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: jamie@108: *argv_donor = XTRACT_SPECTRAL_MEAN; jamie@123: break; */ jamie@140: case XTRACT_SPECTRAL_INHARMONICITY: jamie@140: *argv_donor = XTRACT_FAILSAFE_F0; jamie@140: break; jamie@140: case XTRACT_FLATNESS_DB: jamie@140: *argv_donor = XTRACT_FLATNESS; jamie@140: break; jamie@140: case XTRACT_TONALITY: jamie@140: *argv_donor = XTRACT_FLATNESS_DB; jamie@140: break; jamie@140: case XTRACT_LOWEST_VALUE: jamie@140: case XTRACT_F0: jamie@140: case XTRACT_FAILSAFE_F0: jamie@161: case XTRACT_WAVELET_F0: jamie@205: case XTRACT_MIDICENT: jamie@140: *argv_donor = XTRACT_ANY; jamie@140: break; jamie@140: case XTRACT_MFCC: jamie@140: *argv_donor = XTRACT_INIT_MFCC; jamie@140: break; jamie@140: /* argc = 2 */; jamie@140: case XTRACT_ROLLOFF: jamie@140: case XTRACT_PEAK_SPECTRUM: jamie@140: case XTRACT_FLUX: jamie@140: case XTRACT_LNORM: jamie@140: *argv_donor = XTRACT_ANY; jamie@140: *(argv_donor + 1) = XTRACT_ANY; jamie@140: break; jamie@140: case XTRACT_SKEWNESS: jamie@140: case XTRACT_KURTOSIS: jamie@140: *argv_donor = XTRACT_MEAN; jamie@140: *(argv_donor + 1) = XTRACT_STANDARD_DEVIATION; jamie@140: break; jamie@140: case XTRACT_SPECTRAL_SKEWNESS: jamie@140: case XTRACT_SPECTRAL_KURTOSIS: jamie@140: *argv_donor = XTRACT_SPECTRAL_MEAN; jamie@140: *(argv_donor + 1) = XTRACT_SPECTRAL_STANDARD_DEVIATION; jamie@140: break; jamie@140: case XTRACT_HARMONIC_SPECTRUM: jamie@140: *argv_donor = XTRACT_FAILSAFE_F0; jamie@140: *(argv_donor + 1) = XTRACT_ANY; jamie@140: break; jamie@140: case XTRACT_NOISINESS: jamie@140: *argv_donor = XTRACT_SUM; jamie@140: *(argv_donor + 1) = XTRACT_SUM; jamie@140: break; jamie@140: case XTRACT_CREST: jamie@140: *argv_donor = XTRACT_HIGHEST_VALUE; jamie@140: *(argv_donor + 1) = XTRACT_MEAN; jamie@140: break; jamie@140: /* argc = 4 */ jamie@140: case XTRACT_SPECTRUM: jamie@140: *argv_donor = XTRACT_ANY; jamie@140: *(argv_donor + 1) = XTRACT_ANY; jamie@140: *(argv_donor + 2) = XTRACT_ANY; jamie@140: *(argv_donor + 3) = XTRACT_ANY; jamie@140: break; jamie@140: case XTRACT_SUBBANDS: jamie@140: *argv_donor = XTRACT_ANY; jamie@140: *(argv_donor + 1) = XTRACT_ANY; jamie@140: *(argv_donor + 2) = XTRACT_ANY; jamie@140: *(argv_donor + 3) = XTRACT_ANY; jamie@140: break; jamie@108: /* BARK_BANDS */ jamie@140: case XTRACT_BARK_COEFFICIENTS: jamie@140: *argv_donor = XTRACT_INIT_BARK; jamie@140: break; jamie@140: case XTRACT_WINDOWED: jamie@140: *argv_donor = XTRACT_INIT_WINDOWED; jamie@140: break; jamie@140: default: jamie@140: *argv_donor = XTRACT_ANY; jamie@140: break; jamie@108: } jamie@51: jamie@54: data_format = &d->data.format; jamie@54: jamie@140: switch(f) jamie@140: { jamie@54: jamie@140: case XTRACT_MEAN: jamie@140: case XTRACT_VARIANCE: jamie@140: case XTRACT_STANDARD_DEVIATION: jamie@140: case XTRACT_AVERAGE_DEVIATION: jamie@140: case XTRACT_SKEWNESS: jamie@140: case XTRACT_KURTOSIS: jamie@140: case XTRACT_LOWEST_VALUE: jamie@140: case XTRACT_HIGHEST_VALUE: jamie@140: case XTRACT_SUM: jamie@140: case XTRACT_WINDOWED: jamie@140: *data_format = XTRACT_ARBITRARY_SERIES; jamie@140: break; jamie@140: case XTRACT_SPECTRAL_MEAN: jamie@140: case XTRACT_SPECTRAL_VARIANCE: jamie@140: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@123: /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */ jamie@140: case XTRACT_SPECTRAL_SKEWNESS: jamie@140: case XTRACT_SPECTRAL_KURTOSIS: jamie@140: case XTRACT_SPECTRAL_CENTROID: jamie@140: case XTRACT_SPECTRAL_SLOPE: jamie@140: *data_format = XTRACT_SPECTRAL; jamie@140: break; jamie@140: case XTRACT_ROLLOFF: jamie@140: case XTRACT_NOISINESS: jamie@140: case XTRACT_BARK_COEFFICIENTS: jamie@140: case XTRACT_CREST: jamie@140: case XTRACT_IRREGULARITY_K: jamie@140: case XTRACT_IRREGULARITY_J: jamie@140: case XTRACT_SMOOTHNESS: jamie@140: case XTRACT_FLATNESS: jamie@140: case XTRACT_SPREAD: jamie@140: case XTRACT_POWER: jamie@140: case XTRACT_HPS: jamie@140: case XTRACT_PEAK_SPECTRUM: jamie@140: case XTRACT_SUBBANDS: jamie@140: case XTRACT_MFCC: jamie@140: *data_format = XTRACT_SPECTRAL_MAGNITUDES; jamie@140: break; jamie@140: case XTRACT_LPC: jamie@140: *data_format = XTRACT_AUTOCORRELATION_COEFFS; jamie@140: break; jamie@140: case XTRACT_LPCC: jamie@140: *data_format = XTRACT_LPC_COEFFS; jamie@140: break; jamie@140: case XTRACT_SPECTRAL_INHARMONICITY: jamie@140: case XTRACT_HARMONIC_SPECTRUM: jamie@140: *data_format = XTRACT_SPECTRAL_PEAKS; jamie@140: break; jamie@140: case XTRACT_NONZERO_COUNT: jamie@140: *data_format = XTRACT_SPECTRAL_PEAKS_MAGNITUDES; jamie@140: break; jamie@140: case XTRACT_F0: jamie@140: case XTRACT_FAILSAFE_F0: jamie@161: case XTRACT_WAVELET_F0: jamie@140: case XTRACT_SPECTRUM: jamie@140: case XTRACT_AUTOCORRELATION: jamie@140: case XTRACT_AUTOCORRELATION_FFT: jamie@140: case XTRACT_DCT: jamie@140: case XTRACT_AMDF: jamie@140: case XTRACT_ASDF: jamie@140: case XTRACT_ZCR: jamie@140: case XTRACT_RMS_AMPLITUDE: jamie@140: case XTRACT_FLUX: jamie@140: case XTRACT_LNORM: jamie@140: *data_format = XTRACT_AUDIO_SAMPLES; jamie@140: break; jamie@140: case XTRACT_TONALITY: jamie@140: case XTRACT_FLATNESS_DB: jamie@140: *data_format = XTRACT_NO_DATA; jamie@140: break; jamie@140: case XTRACT_TRISTIMULUS_1: jamie@140: case XTRACT_TRISTIMULUS_2: jamie@140: case XTRACT_TRISTIMULUS_3: jamie@140: case XTRACT_ODD_EVEN_RATIO: jamie@140: *data_format = XTRACT_SPECTRAL_HARMONICS_MAGNITUDES; jamie@140: break; jamie@140: case XTRACT_LOUDNESS: jamie@140: case XTRACT_SHARPNESS: jamie@140: *data_format = XTRACT_BARK_COEFFS; jamie@140: break; jamie@140: case XTRACT_DIFFERENCE_VECTOR: jamie@140: *data_format = XTRACT_SUBFRAMES; jamie@140: break; jamie@140: case XTRACT_ATTACK_TIME: jamie@140: case XTRACT_DECAY_TIME: jamie@205: case XTRACT_MIDICENT: jamie@140: default: jamie@140: *data_format = XTRACT_NO_DATA; jamie@140: break; jamie@108: } jamie@54: jamie@55: data_unit = &d->data.unit; jamie@55: jamie@140: switch(f) jamie@140: { jamie@55: jamie@140: case XTRACT_MEAN: jamie@140: case XTRACT_VARIANCE: jamie@140: case XTRACT_STANDARD_DEVIATION: jamie@140: case XTRACT_AVERAGE_DEVIATION: jamie@140: case XTRACT_SKEWNESS: jamie@140: case XTRACT_KURTOSIS: jamie@140: case XTRACT_LOWEST_VALUE: jamie@140: case XTRACT_HIGHEST_VALUE: jamie@140: case XTRACT_SUM: jamie@140: case XTRACT_ZCR: jamie@140: case XTRACT_PEAK_SPECTRUM: jamie@140: case XTRACT_TRISTIMULUS_1: jamie@140: case XTRACT_TRISTIMULUS_2: jamie@140: case XTRACT_TRISTIMULUS_3: jamie@140: case XTRACT_DCT: jamie@140: case XTRACT_AMDF: jamie@140: case XTRACT_ASDF: jamie@140: case XTRACT_IRREGULARITY_K: jamie@140: case XTRACT_IRREGULARITY_J: jamie@140: case XTRACT_ATTACK_TIME: jamie@140: case XTRACT_DECAY_TIME: jamie@140: case XTRACT_DIFFERENCE_VECTOR: jamie@140: case XTRACT_FLUX: jamie@140: case XTRACT_LNORM: jamie@140: case XTRACT_F0: jamie@140: case XTRACT_FAILSAFE_F0: jamie@161: case XTRACT_WAVELET_F0: jamie@140: case XTRACT_MFCC: jamie@140: case XTRACT_AUTOCORRELATION: jamie@140: case XTRACT_AUTOCORRELATION_FFT: jamie@140: case XTRACT_ROLLOFF: jamie@140: case XTRACT_NOISINESS: jamie@140: case XTRACT_CREST: jamie@140: case XTRACT_FLATNESS: jamie@140: case XTRACT_FLATNESS_DB: jamie@140: case XTRACT_POWER: jamie@140: case XTRACT_BARK_COEFFICIENTS: jamie@140: case XTRACT_RMS_AMPLITUDE: jamie@140: case XTRACT_SMOOTHNESS: jamie@140: case XTRACT_SPREAD: jamie@140: case XTRACT_SHARPNESS: jamie@140: case XTRACT_HPS: jamie@140: case XTRACT_SPECTRUM: jamie@140: case XTRACT_TONALITY: jamie@140: case XTRACT_LOUDNESS: jamie@140: case XTRACT_NONZERO_COUNT: jamie@140: case XTRACT_LPC: jamie@140: case XTRACT_LPCC: jamie@140: case XTRACT_WINDOWED: jamie@140: case XTRACT_SUBBANDS: andrea@211: *data_unit = (xtract_unit_t)XTRACT_ANY; jamie@140: break; jamie@140: case XTRACT_SPECTRAL_MEAN: jamie@140: case XTRACT_SPECTRAL_VARIANCE: jamie@140: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@123: /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */ jamie@140: case XTRACT_SPECTRAL_SKEWNESS: jamie@140: case XTRACT_SPECTRAL_KURTOSIS: jamie@140: case XTRACT_SPECTRAL_CENTROID: jamie@140: case XTRACT_SPECTRAL_SLOPE: jamie@140: case XTRACT_HARMONIC_SPECTRUM: jamie@140: case XTRACT_SPECTRAL_INHARMONICITY: jamie@140: *data_unit = XTRACT_ANY_AMPLITUDE_HERTZ; jamie@140: break; jamie@140: case XTRACT_ODD_EVEN_RATIO: jamie@140: *data_unit = XTRACT_HERTZ; jamie@140: break; jamie@108: } jamie@55: jamie@108: name = d->algo.name; jamie@108: p_name = d->algo.p_name; jamie@108: desc = d->algo.desc; jamie@108: p_desc = d->algo.p_desc; jamie@108: author = d->algo.author; jamie@108: year = &d->algo.year; jamie@51: jamie@108: strcpy(author, ""); jamie@108: *year = 0; jamie@51: jamie@140: switch(f) jamie@140: { jamie@140: case XTRACT_MEAN: jamie@140: strcpy(name, "mean"); jamie@140: strcpy(p_name, "Mean"); jamie@140: strcpy(desc, "Extract the mean of an input vector"); jamie@140: strcpy(p_desc, "Extract the mean of a range of values"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_VARIANCE: jamie@140: strcpy(name, "variance"); jamie@140: strcpy(p_name, "Variance"); jamie@140: strcpy(desc, "Extract the variance of an input vector"); jamie@140: strcpy(p_desc, "Extract the variance of a range of values"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_STANDARD_DEVIATION: jamie@140: strcpy(name, "standard_deviation"); jamie@140: strcpy(p_name, "Standard Deviation"); jamie@140: strcpy(desc, jamie@140: "Extract the standard deviation of an input vector"); jamie@140: strcpy(p_desc, jamie@140: "Extract the standard deviation of a range of values"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_AVERAGE_DEVIATION: jamie@140: strcpy(name, "average_deviation"); jamie@140: strcpy(p_name, "Average Deviation"); jamie@140: strcpy(desc, jamie@140: "Extract the average deviation of an input vector"); jamie@140: strcpy(p_desc, jamie@140: "Extract the average deviation of a range of values"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_SKEWNESS: jamie@140: strcpy(name, "skewness"); jamie@140: strcpy(p_name, "Skewness"); jamie@140: strcpy(desc, jamie@140: "Extract the skewness of an input vector"); jamie@140: strcpy(p_desc, jamie@140: "Extract the skewness of a range of values"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_KURTOSIS: jamie@140: strcpy(name, "kurtosis"); jamie@140: strcpy(p_name, "Kurtosis"); jamie@140: strcpy(desc, jamie@140: "Extract the kurtosis of an input vector"); jamie@140: strcpy(p_desc, jamie@140: "Extract the kurtosis of a range of values"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_SPECTRAL_MEAN: jamie@140: strcpy(name, "spectral_mean"); jamie@140: strcpy(p_name, "Spectral Mean"); jamie@140: strcpy(desc, "Extract the mean of an input spectrum"); jamie@140: strcpy(p_desc, "Extract the mean of an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_SPECTRAL_VARIANCE: jamie@140: strcpy(name, "spectral_variance"); jamie@140: strcpy(p_name, "Spectral Variance"); jamie@140: strcpy(desc, "Extract the variance of an input spectrum"); jamie@140: strcpy(p_desc, "Extract the variance of an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@140: strcpy(name, "spectral_standard_deviation"); jamie@140: strcpy(p_name, "Spectral Standard Deviation"); jamie@140: strcpy(desc, jamie@140: "Extract the standard deviation of an input spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the standard deviation of an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@123: /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: jamie@108: strcpy(name, "spectral_average_deviation"); jamie@108: strcpy(p_name, "Spectral Average Deviation"); jamie@140: strcpy(desc, jamie@108: "Extract the average deviation of an input spectrum"); jamie@140: strcpy(p_desc, jamie@108: "Extract the average deviation of an audio spectrum"); jamie@108: strcpy(author, ""); jamie@108: break; jamie@123: */ jamie@140: case XTRACT_ROLLOFF: jamie@140: strcpy(name, "rolloff"); jamie@140: strcpy(p_name, "Spectral Rolloff"); jamie@140: strcpy(desc, jamie@140: "Extract the rolloff point of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the rolloff point of an audio spectrum"); jamie@140: strcpy(author, "Bee Suan Ong"); jamie@140: *year = 2005; jamie@140: break; jamie@140: case XTRACT_SPECTRAL_INHARMONICITY: jamie@140: strcpy(name, "spectral_inharmonicity"); jamie@140: strcpy(p_name, "Inharmonicity"); jamie@140: strcpy(desc, "Extract the inharmonicity of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the inharmonicity of an audio spectrum"); jamie@140: break; jamie@140: case XTRACT_SPECTRUM: jamie@140: strcpy(name, "spectrum"); jamie@140: strcpy(p_name, "Spectrum"); jamie@140: strcpy(desc, jamie@140: "Extract the spectrum of an input vector"); jamie@140: strcpy(p_desc, jamie@140: "Extract the spectrum of an audio signal"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_ODD_EVEN_RATIO: jamie@140: strcpy(name, "odd_even_ratio"); jamie@140: strcpy(p_name, "Odd/even Harmonic Ratio"); jamie@140: strcpy(desc, jamie@140: "Extract the odd-to-even harmonic ratio of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the odd-to-even harmonic ratio of an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_LOWEST_VALUE: jamie@140: strcpy(name, "lowest_value"); jamie@140: strcpy(p_name, "Lowest Value"); jamie@140: strcpy(desc, "Extract the lowest value from an input vector"); jamie@140: strcpy(p_desc, "Extract the lowest value from a given range"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_F0: jamie@140: strcpy(name, "f0"); jamie@140: strcpy(p_name, "Fundamental Frequency"); jamie@140: strcpy(desc, "Extract the fundamental frequency of a signal"); jamie@140: strcpy(p_desc, jamie@140: "Extract the fundamental frequency of an audio signal"); jamie@140: strcpy(author, "Jamie Bullock"); jamie@140: break; jamie@140: case XTRACT_FAILSAFE_F0: jamie@140: strcpy(name, "failsafe_f0"); jamie@140: strcpy(p_name, "Fundamental Frequency (failsafe)"); jamie@140: strcpy(desc, "Extract the fundamental frequency of a signal (failsafe)"); jamie@140: strcpy(p_desc, jamie@140: "Extract the fundamental frequency of an audio signal (failsafe)"); jamie@140: strcpy(author, "Jamie Bullock"); jamie@140: break; jamie@161: case XTRACT_WAVELET_F0: jamie@161: strcpy(name, "wavelet_f0"); jamie@161: strcpy(p_name, "Fundamental Frequency (wavelet method)"); jamie@161: strcpy(desc, "Extract the fundamental frequency of a signal (wavelet method)"); jamie@161: strcpy(p_desc, jamie@161: "Extract the fundamental frequency of an audio signal (wavelet method)"); jamie@161: strcpy(author, "Antoine Schmitt"); jamie@161: break; jamie@205: case XTRACT_MIDICENT: jamie@205: strcpy(name, "midicent"); jamie@205: strcpy(p_name, "Frequency to MIDI Cent conversion"); jamie@205: strcpy(desc, "Convert frequency in Hertz to Pitch in MIDI cents"); jamie@205: strcpy(p_desc, "Convert frequency in Hertz to Pitch in MIDI cents"); jamie@205: strcpy(author, "Jamie Bullock"); jamie@205: break; jamie@140: case XTRACT_TONALITY: jamie@140: strcpy(name, "tonality"); jamie@140: strcpy(p_name, "Tonality"); jamie@140: strcpy(desc, "Extract the tonality of a spectrum"); jamie@140: strcpy(p_desc, "Extract the tonality an audio spectrum"); jamie@140: strcpy(author, "J. D. Johnston"); jamie@140: *year = 1988; jamie@140: break; jamie@140: case XTRACT_SPECTRAL_SKEWNESS: jamie@140: strcpy(name, "spectral_skewness"); jamie@140: strcpy(p_name, "Spectral Skewness"); jamie@140: strcpy(desc, "Extract the skewness of an input spectrum"); jamie@140: strcpy(p_desc, "Extract the skewness of an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_SPECTRAL_KURTOSIS: jamie@140: strcpy(name, "spectral_kurtosis"); jamie@140: strcpy(p_name, "Spectral Kurtosis"); jamie@140: strcpy(desc, "Extract the kurtosis of an input spectrum"); jamie@140: strcpy(p_desc, "Extract the kurtosis of an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_PEAK_SPECTRUM: jamie@140: strcpy(name, "peak_spectrum"); jamie@140: strcpy(p_name, "Peak Spectrum"); jamie@140: strcpy(desc, "Extract the spectral peaks from of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the spectral peaks from an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_HARMONIC_SPECTRUM: jamie@140: strcpy(name, "harmonic_spectrum"); jamie@140: strcpy(p_name, "Harmonic Spectrum"); jamie@140: strcpy(desc, "Extract the harmonics from a spectrum"); jamie@140: strcpy(p_desc, "Extract the harmonics from an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_NOISINESS: jamie@140: strcpy(name, "noisiness"); jamie@140: strcpy(p_name, "Noisiness"); jamie@140: strcpy(desc, "Extract the noisiness of a spectrum"); jamie@140: strcpy(p_desc, "Extract the noisiness of an audio spectrum"); jamie@140: strcpy(author, "Tae Hong Park"); jamie@140: *year = 2000; jamie@140: break; jamie@140: case XTRACT_CREST: jamie@140: strcpy(name, "crest"); jamie@140: strcpy(p_name, "Spectral Crest Measure"); jamie@140: strcpy(desc, jamie@140: "Extract the spectral crest measure of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the spectral crest measure of an audio spectrum"); jamie@140: strcpy(author, "Peeters"); jamie@140: *year = 2003; jamie@140: break; jamie@140: case XTRACT_MFCC: jamie@140: strcpy(name, "mfcc"); jamie@140: strcpy(p_name, "Mel-Frequency Cepstral Coefficients"); jamie@140: strcpy(desc, "Extract MFCC from a spectrum"); jamie@140: strcpy(p_desc, "Extract MFCC from an audio spectrum"); jamie@140: strcpy(author, "Rabiner"); jamie@140: break; jamie@140: case XTRACT_LPC: jamie@140: strcpy(name, "lpc"); jamie@140: strcpy(p_name, "Linear predictive coding coefficients"); jamie@140: strcpy(desc, "Extract LPC from autocorrelation coefficients"); jamie@140: strcpy(p_desc, jamie@140: "Extract LPC from autocorrelation coefficients"); jamie@140: strcpy(author, jamie@140: "Rabiner and Juang as implemented by Jutta Degener"); jamie@140: *year = 1994; jamie@140: break; jamie@140: case XTRACT_LPCC: jamie@140: strcpy(name, "lpcc"); jamie@140: strcpy(p_name, "Linear predictive coding cepstral coefficients"); jamie@140: strcpy(desc, "Extract LPC cepstrum from LPC coefficients"); jamie@140: strcpy(p_desc, jamie@140: "Extract LPC cepstrum from LPC coefficients"); jamie@140: strcpy(author, "Rabiner and Juang"); jamie@140: *year = 1993; jamie@140: break; jamie@140: case XTRACT_SUBBANDS: jamie@140: strcpy(name, "subbands"); jamie@140: strcpy(p_name, "Sub band coefficients"); jamie@140: strcpy(desc, "Extract subband coefficients from spectral magnitudes"); jamie@140: strcpy(p_desc, jamie@140: "Extract subband coefficients from spectral magnitudes"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_BARK_COEFFICIENTS: jamie@140: strcpy(name, "bark_coefficients"); jamie@140: strcpy(p_name, "Bark Coefficients"); jamie@140: strcpy(desc, "Extract bark coefficients from a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract bark coefficients from an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_SPECTRAL_CENTROID: jamie@140: strcpy(name, "spectral_centroid"); jamie@140: strcpy(p_name, "Spectral Centroid"); jamie@140: strcpy(desc, "Extract the spectral centroid of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the spectral centroid of an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_IRREGULARITY_K: jamie@140: strcpy(name, "irregularity_k"); jamie@140: strcpy(p_name, "Irregularity I"); jamie@140: strcpy(desc, "Extract the irregularity (type I) of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the irregularity (type I) of an audio spectrum"); jamie@140: strcpy(author, "Krimphoff"); jamie@140: *year = 1994; jamie@140: break; jamie@140: case XTRACT_IRREGULARITY_J: jamie@140: strcpy(name, "irregularity_j"); jamie@140: strcpy(p_name, "Irregularity II"); jamie@140: strcpy(desc, "Extract the irregularity (type II) of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the irregularity (type II) of an audio spectrum"); jamie@140: strcpy(author, "Jensen"); jamie@140: *year = 1999; jamie@140: break; jamie@140: case XTRACT_TRISTIMULUS_1: jamie@140: strcpy(name, "tristimulus_1"); jamie@140: strcpy(p_name, "Tristimulus I"); jamie@140: strcpy(desc, "Extract the tristimulus (type I) of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the tristimulus (type I) of an audio spectrum"); jamie@140: strcpy(author, "Pollard and Jansson"); jamie@140: *year = 1982; jamie@140: break; jamie@140: case XTRACT_TRISTIMULUS_2: jamie@140: strcpy(name, "tristimulus_2"); jamie@140: strcpy(p_name, "Tristimulus II"); jamie@140: strcpy(desc, "Extract the tristimulus (type II) of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the tristimulus (type II) of an audio spectrum"); jamie@140: strcpy(author, "Pollard and Jansson"); jamie@140: *year = 1982; jamie@140: break; jamie@140: case XTRACT_TRISTIMULUS_3: jamie@140: strcpy(name, "tristimulus_3"); jamie@140: strcpy(p_name, "Tristimulus III"); jamie@140: strcpy(desc, jamie@140: "Extract the tristimulus (type III) of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the tristimulus (type III) of an audio spectrum"); jamie@140: strcpy(author, "Pollard and Jansson"); jamie@140: *year = 1982; jamie@140: break; jamie@140: case XTRACT_SMOOTHNESS: jamie@140: strcpy(name, "smoothness"); jamie@140: strcpy(p_name, "Spectral Smoothness"); jamie@140: strcpy(desc, "Extract the spectral smoothness of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the spectral smoothness of an audio spectrum"); jamie@140: strcpy(author, "McAdams"); jamie@140: *year = 1999; jamie@140: break; jamie@140: case XTRACT_FLATNESS: jamie@140: strcpy(name, "flatness"); jamie@140: strcpy(p_name, "Spectral Flatness"); jamie@140: strcpy(desc, "Extract the spectral flatness of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the spectral flatness of an audio spectrum"); jamie@140: strcpy(author, "Tristan Jehan"); jamie@140: *year = 2005; jamie@140: break; jamie@140: case XTRACT_FLATNESS_DB: jamie@140: strcpy(name, "flatness_db"); jamie@140: strcpy(p_name, "Log Spectral Flatness"); jamie@140: strcpy(desc, "Extract the log spectral flatness of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the log spectral flatness of an audio spectrum"); jamie@140: strcpy(author, "Peeters"); jamie@140: *year = 2003; jamie@140: break; jamie@140: case XTRACT_SPREAD: jamie@140: strcpy(name, "spread"); jamie@140: strcpy(p_name, "Spectral Spread"); jamie@140: strcpy(desc, "Extract the spectral spread of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the spectral spread of an audio spectrum"); jamie@140: strcpy(author, "Norman Casagrande"); jamie@140: *year = 2005; jamie@140: break; jamie@140: case XTRACT_ZCR: jamie@140: strcpy(name, "zcr"); jamie@140: strcpy(p_name, "Zero Crossing Rate"); jamie@140: strcpy(desc, "Extract the zero crossing rate of a vector"); jamie@140: strcpy(p_desc, jamie@140: "Extract the zero crossing rate of an audio signal"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_LOUDNESS: jamie@140: strcpy(name, "loudness"); jamie@140: strcpy(p_name, "Loudness"); jamie@140: strcpy(desc, jamie@140: "Extract the loudness of a signal from its spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the loudness of an audio signal from its spectrum"); jamie@140: strcpy(author, "Moore, Glasberg et al"); jamie@140: *year = 2005; jamie@140: break; jamie@140: case XTRACT_HIGHEST_VALUE: jamie@140: strcpy(name, "highest_value"); jamie@140: strcpy(p_name, "Highest Value"); jamie@140: strcpy(desc, "Extract the highest value from an input vector"); jamie@140: strcpy(p_desc, "Extract the highest value from a given range"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_SUM: jamie@140: strcpy(name, "sum"); jamie@140: strcpy(p_name, "Sum of Values"); jamie@140: strcpy(desc, jamie@140: "Extract the sum of the values in an input vector"); jamie@140: strcpy(p_desc, jamie@140: "Extract the sum of the values in a given range"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_RMS_AMPLITUDE: jamie@140: strcpy(name, "rms_amplitude"); jamie@140: strcpy(p_name, "RMS Amplitude"); jamie@140: strcpy(desc, "Extract the RMS amplitude of a signal"); jamie@140: strcpy(p_desc, "Extract the RMS amplitude of an audio signal"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_POWER: jamie@140: strcpy(name, "power"); jamie@140: strcpy(p_name, "Spectral Power"); jamie@140: strcpy(desc, "Extract the spectral power of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the spectral power of an audio spectrum"); jamie@140: strcpy(author, "Bee Suan Ong"); jamie@140: *year = 2005; jamie@140: break; jamie@140: case XTRACT_SHARPNESS: jamie@140: strcpy(name, "sharpness"); jamie@140: strcpy(p_name, "Spectral Sharpness"); jamie@140: strcpy(desc, "Extract the spectral sharpness of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the spectral sharpness of an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_SPECTRAL_SLOPE: jamie@140: strcpy(name, "spectral_slope"); jamie@140: strcpy(p_name, "Spectral Slope"); jamie@140: strcpy(desc, "Extract the spectral slope of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the spectral slope of an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_HPS: jamie@140: strcpy(name, "hps"); jamie@140: strcpy(p_name, "Harmonic Product Spectrum"); jamie@140: strcpy(desc, jamie@140: "Extract the harmonic product spectrum of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the harmonic product spectrum of an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_FLUX: jamie@140: strcpy(name, "flux"); jamie@140: strcpy(p_name, "Spectral Flux"); jamie@140: strcpy(desc, "Extract the spectral flux of a spectrum"); jamie@140: strcpy(p_desc, jamie@140: "Extract the spectral flux of an audio spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_LNORM: jamie@140: strcpy(name, "lnorm"); jamie@140: strcpy(p_name, "L-norm"); jamie@140: strcpy(desc, "Extract the L-norm of a vector"); jamie@140: strcpy(p_desc, "Extract the L-norm of a vector"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_ATTACK_TIME: jamie@140: strcpy(name, "attack_time"); jamie@140: strcpy(p_name, "Attack Time"); jamie@140: strcpy(desc, "Extract the attack time of a signal"); jamie@140: strcpy(p_desc, "Extract the attack time of an audio signal"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_DECAY_TIME: jamie@140: strcpy(name, "decay_time"); jamie@140: strcpy(p_name, "Decay Time"); jamie@140: strcpy(desc, "Extract the decay time of a signal"); jamie@140: strcpy(p_desc, "Extract the decay time of an audio signal"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_DIFFERENCE_VECTOR: jamie@140: strcpy(name, "difference_vector"); jamie@140: strcpy(p_name, "Difference vector"); jamie@140: strcpy(desc, "Extract the difference between two vectors"); jamie@140: strcpy(p_desc, "Extract the difference between two vectors"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_AUTOCORRELATION_FFT: jamie@140: strcpy(name, "autocorrelation_fft"); jamie@140: strcpy(p_name, "Autocorrelation (FFT method)"); jamie@140: strcpy(desc, "Extract the autocorrelation of a signal (fft method)"); jamie@140: strcpy(p_desc, "Extract the autocorrelation of an audio signal (fft method)"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_DCT: jamie@140: strcpy(name, "dct"); jamie@140: strcpy(p_name, "Discrete Cosine Transform"); jamie@140: strcpy(desc, "Extract the DCT of a signal"); jamie@140: strcpy(p_desc, "Extract the DCT of an audio signal"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_AUTOCORRELATION: jamie@140: strcpy(name, "autocorrelation"); jamie@140: strcpy(p_name, "Autocorrelation"); jamie@140: strcpy(desc, "Extract the autocorrelation of a signal"); jamie@140: strcpy(p_desc, jamie@140: "Extract the autocorrelation of an audio signal"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_AMDF: jamie@140: strcpy(name, "amdf"); jamie@140: strcpy(p_name, "Average Magnitude Difference Function"); jamie@140: strcpy(desc, "Extract the AMDF of a signal"); jamie@140: strcpy(p_desc, "Extract the AMDF of an audio signal"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_ASDF: jamie@140: strcpy(name, "asdf"); jamie@140: strcpy(p_name, "Average Squared Difference Function"); jamie@140: strcpy(desc, "Extract the ASDF of a signal"); jamie@140: strcpy(p_desc, "Extract the ASDF of an audio signal"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_NONZERO_COUNT: jamie@140: strcpy(name, "nonzero_count"); jamie@140: strcpy(p_name, "Non-zero count"); jamie@140: strcpy(desc, jamie@140: "Extract the number of non-zero elements in the input vector"); jamie@140: strcpy(p_desc, jamie@140: "Extract the number of non-zero elements in an input spectrum"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: case XTRACT_WINDOWED: jamie@140: strcpy(name, "windowed"); jamie@140: strcpy(p_name, "Windowed frame"); jamie@140: strcpy(desc, "Apply a window function to a frame of data"); jamie@140: strcpy(p_desc, "Apply a window function to a frame of data"); jamie@140: strcpy(author, ""); jamie@140: break; jamie@140: default: jamie@140: strcpy(name, ""); jamie@140: strcpy(p_name, ""); jamie@140: strcpy(desc, ""); jamie@140: strcpy(p_desc, ""); jamie@140: strcpy(author, ""); jamie@140: break; jamie@108: } jamie@55: jamie@140: switch(f) jamie@140: { jamie@55: jamie@140: case XTRACT_VARIANCE: jamie@140: case XTRACT_STANDARD_DEVIATION: jamie@140: case XTRACT_AVERAGE_DEVIATION: jamie@140: case XTRACT_SPECTRAL_VARIANCE: jamie@140: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@123: /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */ jamie@140: case XTRACT_SPECTRAL_INHARMONICITY: jamie@140: case XTRACT_LOWEST_VALUE: jamie@140: case XTRACT_F0: jamie@140: case XTRACT_FAILSAFE_F0: jamie@161: case XTRACT_WAVELET_F0: jamie@205: case XTRACT_MIDICENT: jamie@140: case XTRACT_FLATNESS_DB: jamie@140: case XTRACT_TONALITY: jamie@140: *argc = 1; jamie@140: *argv_type = XTRACT_FLOAT; jamie@140: break; jamie@140: case XTRACT_SKEWNESS: jamie@140: case XTRACT_KURTOSIS: jamie@140: case XTRACT_SPECTRAL_SKEWNESS: jamie@140: case XTRACT_SPECTRAL_KURTOSIS: jamie@140: case XTRACT_PEAK_SPECTRUM: jamie@140: case XTRACT_HARMONIC_SPECTRUM: jamie@140: case XTRACT_NOISINESS: jamie@140: case XTRACT_CREST: jamie@140: case XTRACT_ROLLOFF: jamie@140: case XTRACT_FLUX: jamie@140: case XTRACT_LNORM: jamie@140: *argc = 2; jamie@140: *argv_type = XTRACT_FLOAT; jamie@140: break; jamie@140: case XTRACT_SPECTRUM: jamie@140: *argc = 4; jamie@140: *argv_type = XTRACT_FLOAT; jamie@140: break; jamie@140: case XTRACT_SUBBANDS: jamie@140: *argc = 4; jamie@140: *argv_type = XTRACT_INT; jamie@140: break; jamie@140: case XTRACT_MFCC: jamie@140: *argc = 1; jamie@140: *argv_type = XTRACT_MEL_FILTER; jamie@140: break; jamie@140: case XTRACT_LPCC: jamie@140: *argc = 1; jamie@140: *argv_type = XTRACT_INT; jamie@140: break; jamie@140: case XTRACT_BARK_COEFFICIENTS: jamie@140: *argc = XTRACT_BARK_BANDS; jamie@140: *argv_type = XTRACT_INT; jamie@140: break; jamie@140: case XTRACT_WINDOWED: jamie@140: *argc = XTRACT_WINDOW_SIZE; jamie@140: *argv_type = XTRACT_FLOAT; jamie@140: break; jamie@140: case XTRACT_MEAN: jamie@140: case XTRACT_SPECTRAL_MEAN: jamie@140: case XTRACT_SPECTRAL_CENTROID: jamie@140: case XTRACT_IRREGULARITY_K: jamie@140: case XTRACT_IRREGULARITY_J: jamie@140: case XTRACT_TRISTIMULUS_1: jamie@140: case XTRACT_TRISTIMULUS_2: jamie@140: case XTRACT_TRISTIMULUS_3: jamie@140: case XTRACT_SMOOTHNESS: jamie@140: case XTRACT_FLATNESS: jamie@140: case XTRACT_SPREAD: jamie@140: case XTRACT_ZCR: jamie@140: case XTRACT_LOUDNESS: jamie@140: case XTRACT_HIGHEST_VALUE: jamie@140: case XTRACT_SUM: jamie@140: case XTRACT_RMS_AMPLITUDE: jamie@140: case XTRACT_POWER: jamie@140: case XTRACT_SHARPNESS: jamie@140: case XTRACT_SPECTRAL_SLOPE: jamie@140: case XTRACT_HPS: jamie@140: case XTRACT_ATTACK_TIME: jamie@140: case XTRACT_DECAY_TIME: jamie@140: case XTRACT_DIFFERENCE_VECTOR: jamie@140: case XTRACT_AUTOCORRELATION_FFT: jamie@140: case XTRACT_DCT: jamie@140: case XTRACT_AUTOCORRELATION: jamie@140: case XTRACT_AMDF: jamie@140: case XTRACT_ASDF: jamie@140: case XTRACT_NONZERO_COUNT: jamie@140: case XTRACT_ODD_EVEN_RATIO: jamie@140: case XTRACT_LPC: jamie@140: default: jamie@140: *argc = 0; jamie@140: break; jamie@108: } jamie@55: jamie@108: is_scalar = &d->is_scalar; jamie@108: jamie@140: switch(f) jamie@140: { jamie@140: case XTRACT_MEAN: jamie@140: case XTRACT_VARIANCE: jamie@140: case XTRACT_STANDARD_DEVIATION: jamie@140: case XTRACT_AVERAGE_DEVIATION: jamie@140: case XTRACT_SKEWNESS: jamie@140: case XTRACT_KURTOSIS: jamie@140: case XTRACT_SPECTRAL_MEAN: jamie@140: case XTRACT_SPECTRAL_VARIANCE: jamie@140: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@140: /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */ jamie@140: case XTRACT_SPECTRAL_SKEWNESS: jamie@140: case XTRACT_SPECTRAL_KURTOSIS: jamie@140: case XTRACT_SPECTRAL_CENTROID: jamie@140: case XTRACT_IRREGULARITY_K: jamie@140: case XTRACT_IRREGULARITY_J: jamie@140: case XTRACT_TRISTIMULUS_1: jamie@140: case XTRACT_TRISTIMULUS_2: jamie@140: case XTRACT_TRISTIMULUS_3: jamie@140: case XTRACT_SMOOTHNESS: jamie@140: case XTRACT_SPREAD: jamie@140: case XTRACT_ZCR: jamie@140: case XTRACT_ROLLOFF: jamie@140: case XTRACT_LOUDNESS: jamie@140: case XTRACT_FLATNESS: jamie@140: case XTRACT_FLATNESS_DB: jamie@140: case XTRACT_TONALITY: jamie@140: case XTRACT_CREST: jamie@140: case XTRACT_NOISINESS: jamie@140: case XTRACT_RMS_AMPLITUDE: jamie@140: case XTRACT_SPECTRAL_INHARMONICITY: jamie@140: case XTRACT_POWER: jamie@140: case XTRACT_ODD_EVEN_RATIO: jamie@140: case XTRACT_SHARPNESS: jamie@140: case XTRACT_SPECTRAL_SLOPE: jamie@140: case XTRACT_LOWEST_VALUE: jamie@140: case XTRACT_HIGHEST_VALUE: jamie@140: case XTRACT_SUM: jamie@140: case XTRACT_HPS: jamie@140: case XTRACT_F0: jamie@140: case XTRACT_FAILSAFE_F0: jamie@161: case XTRACT_WAVELET_F0: jamie@205: case XTRACT_MIDICENT: jamie@140: case XTRACT_FLUX: jamie@140: case XTRACT_LNORM: jamie@140: case XTRACT_NONZERO_COUNT: jamie@140: *is_scalar = XTRACT_TRUE; jamie@140: break; jamie@140: case XTRACT_AUTOCORRELATION: jamie@140: case XTRACT_AMDF: jamie@140: case XTRACT_ASDF: jamie@140: case XTRACT_BARK_COEFFICIENTS: jamie@140: case XTRACT_PEAK_SPECTRUM: jamie@140: case XTRACT_SPECTRUM: jamie@140: case XTRACT_SUBBANDS: jamie@140: case XTRACT_AUTOCORRELATION_FFT: jamie@140: case XTRACT_MFCC: jamie@140: case XTRACT_LPC: jamie@140: case XTRACT_LPCC: jamie@140: case XTRACT_DCT: jamie@140: case XTRACT_HARMONIC_SPECTRUM: jamie@140: case XTRACT_DIFFERENCE_VECTOR: jamie@140: case XTRACT_WINDOWED: jamie@140: *is_scalar = XTRACT_FALSE; jamie@140: break; jamie@140: default: jamie@140: *is_scalar = XTRACT_TRUE; jamie@140: break; jamie@140: jamie@140: } jamie@140: jamie@140: is_delta = &d->is_delta; jamie@140: jamie@140: switch(f) jamie@140: { jamie@140: case XTRACT_FLUX: jamie@140: case XTRACT_LNORM: jamie@140: case XTRACT_DIFFERENCE_VECTOR: jamie@140: *is_delta = XTRACT_TRUE; jamie@140: break; jamie@140: case XTRACT_MEAN: jamie@140: case XTRACT_VARIANCE: jamie@140: case XTRACT_STANDARD_DEVIATION: jamie@140: case XTRACT_AVERAGE_DEVIATION: jamie@140: case XTRACT_SKEWNESS: jamie@140: case XTRACT_KURTOSIS: jamie@140: case XTRACT_SPECTRAL_MEAN: jamie@140: case XTRACT_SPECTRAL_VARIANCE: jamie@140: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@140: /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */ jamie@140: case XTRACT_SPECTRAL_SKEWNESS: jamie@140: case XTRACT_SPECTRAL_KURTOSIS: jamie@140: case XTRACT_SPECTRAL_CENTROID: jamie@140: case XTRACT_IRREGULARITY_K: jamie@140: case XTRACT_IRREGULARITY_J: jamie@140: case XTRACT_TRISTIMULUS_1: jamie@140: case XTRACT_TRISTIMULUS_2: jamie@140: case XTRACT_TRISTIMULUS_3: jamie@140: case XTRACT_SMOOTHNESS: jamie@140: case XTRACT_SPREAD: jamie@140: case XTRACT_ZCR: jamie@140: case XTRACT_ROLLOFF: jamie@140: case XTRACT_LOUDNESS: jamie@140: case XTRACT_FLATNESS: jamie@140: case XTRACT_FLATNESS_DB: jamie@140: case XTRACT_TONALITY: jamie@140: case XTRACT_CREST: jamie@140: case XTRACT_NOISINESS: jamie@140: case XTRACT_RMS_AMPLITUDE: jamie@140: case XTRACT_SPECTRAL_INHARMONICITY: jamie@140: case XTRACT_POWER: jamie@140: case XTRACT_ODD_EVEN_RATIO: jamie@140: case XTRACT_SHARPNESS: jamie@140: case XTRACT_SPECTRAL_SLOPE: jamie@140: case XTRACT_LOWEST_VALUE: jamie@140: case XTRACT_HIGHEST_VALUE: jamie@140: case XTRACT_SUM: jamie@140: case XTRACT_HPS: jamie@140: case XTRACT_F0: jamie@140: case XTRACT_FAILSAFE_F0: jamie@161: case XTRACT_WAVELET_F0: jamie@205: case XTRACT_MIDICENT: jamie@140: case XTRACT_NONZERO_COUNT: jamie@140: case XTRACT_AUTOCORRELATION: jamie@140: case XTRACT_AMDF: jamie@140: case XTRACT_ASDF: jamie@140: case XTRACT_BARK_COEFFICIENTS: jamie@140: case XTRACT_PEAK_SPECTRUM: jamie@140: case XTRACT_SPECTRUM: jamie@140: case XTRACT_SUBBANDS: jamie@140: case XTRACT_AUTOCORRELATION_FFT: jamie@140: case XTRACT_MFCC: jamie@140: case XTRACT_LPC: jamie@140: case XTRACT_LPCC: jamie@140: case XTRACT_DCT: jamie@140: case XTRACT_HARMONIC_SPECTRUM: jamie@140: case XTRACT_WINDOWED: jamie@140: default: jamie@140: *is_delta = XTRACT_FALSE; jamie@140: break; jamie@140: } jamie@140: jamie@140: if(*is_scalar) jamie@140: { jamie@140: jamie@140: result_unit = &d->result.scalar.unit; jamie@140: result_min = &d->result.scalar.min; jamie@140: result_max = &d->result.scalar.max; jamie@140: jamie@140: switch(f) jamie@140: { jamie@108: case XTRACT_MEAN: jamie@108: case XTRACT_VARIANCE: jamie@108: case XTRACT_STANDARD_DEVIATION: jamie@108: case XTRACT_AVERAGE_DEVIATION: jamie@108: case XTRACT_SKEWNESS: jamie@108: case XTRACT_KURTOSIS: jamie@140: case XTRACT_RMS_AMPLITUDE: jamie@140: case XTRACT_LOWEST_VALUE: jamie@140: case XTRACT_HIGHEST_VALUE: jamie@140: case XTRACT_SUM: jamie@140: case XTRACT_FLUX: jamie@140: case XTRACT_LNORM: jamie@140: case XTRACT_NONZERO_COUNT: jamie@140: case XTRACT_WINDOWED: andrea@211: *result_unit = (xtract_unit_t)XTRACT_ANY; jamie@140: *result_min = XTRACT_ANY; jamie@140: *result_max = XTRACT_ANY; jamie@140: break; jamie@108: case XTRACT_SPECTRAL_SKEWNESS: jamie@108: case XTRACT_SPECTRAL_KURTOSIS: jamie@108: case XTRACT_IRREGULARITY_K: jamie@108: case XTRACT_IRREGULARITY_J: jamie@108: case XTRACT_TRISTIMULUS_1: jamie@108: case XTRACT_TRISTIMULUS_2: jamie@108: case XTRACT_TRISTIMULUS_3: jamie@140: case XTRACT_NOISINESS: jamie@108: case XTRACT_SMOOTHNESS: andrea@211: *result_unit = (xtract_unit_t)XTRACT_NONE; jamie@140: *result_min = XTRACT_ANY; /* FIX: need to check these */ jamie@140: *result_max = XTRACT_ANY; jamie@108: break; jamie@108: case XTRACT_SPECTRAL_MEAN: jamie@108: case XTRACT_SPECTRAL_VARIANCE: jamie@108: case XTRACT_SPECTRAL_STANDARD_DEVIATION: jamie@140: /* case XTRACT_SPECTRAL_AVERAGE_DEVIATION: */ jamie@108: case XTRACT_SPECTRAL_CENTROID: jamie@108: case XTRACT_SPREAD: jamie@140: case XTRACT_F0: jamie@140: case XTRACT_FAILSAFE_F0: jamie@161: case XTRACT_WAVELET_F0: jamie@140: case XTRACT_HPS: jamie@140: case XTRACT_ROLLOFF: jamie@140: *result_unit = XTRACT_HERTZ; jamie@146: *result_min = 0.0; jamie@146: *result_max = XTRACT_SR_UPPER_LIMIT / 2.0; jamie@140: break; jamie@205: case XTRACT_MIDICENT: jamie@205: *result_unit = XTRACT_MIDI_CENT; jamie@205: *result_min = 0.0; jamie@205: *result_max = 12700; jamie@108: case XTRACT_ZCR: jamie@140: *result_unit = XTRACT_HERTZ; jamie@146: *result_min = 0.0; jamie@140: *result_max = XTRACT_ANY; jamie@140: break; jamie@140: case XTRACT_ODD_EVEN_RATIO: andrea@211: *result_unit = (xtract_unit_t)XTRACT_NONE; jamie@146: *result_min = 0.0; jamie@146: *result_max = 1.0; jamie@140: break; jamie@140: case XTRACT_FLATNESS_DB: jamie@140: *result_unit = XTRACT_DBFS; jamie@140: *result_min = XTRACT_ANY; /* FIX: check this */ jamie@140: *result_max = XTRACT_ANY; jamie@140: break; jamie@108: case XTRACT_LOUDNESS: jamie@108: case XTRACT_FLATNESS: jamie@108: case XTRACT_TONALITY: jamie@108: case XTRACT_CREST: jamie@108: case XTRACT_SPECTRAL_INHARMONICITY: jamie@108: case XTRACT_POWER: jamie@108: case XTRACT_SHARPNESS: jamie@108: case XTRACT_SPECTRAL_SLOPE: jamie@108: case XTRACT_LPC: jamie@108: case XTRACT_LPCC: jamie@108: default: andrea@211: *result_unit = (xtract_unit_t)XTRACT_UNKNOWN; jamie@140: *result_min = XTRACT_UNKNOWN; jamie@140: *result_max = XTRACT_UNKNOWN; jamie@108: break; jamie@108: } jamie@108: } jamie@140: else jamie@140: { jamie@55: jamie@108: result_min = NULL; jamie@108: result_max = NULL; jamie@108: result_unit = &d->result.vector.unit; jamie@108: result_format = &d->result.vector.format; jamie@55: jamie@140: switch(f) jamie@140: { jamie@140: case XTRACT_AUTOCORRELATION: jamie@140: case XTRACT_AMDF: jamie@140: case XTRACT_ASDF: jamie@140: case XTRACT_DCT: jamie@140: case XTRACT_SUBBANDS: jamie@140: case XTRACT_WINDOWED: jamie@140: *result_format = XTRACT_ARBITRARY_SERIES; andrea@211: *result_unit = (xtract_unit_t)XTRACT_ANY; jamie@140: break; jamie@140: case XTRACT_BARK_COEFFICIENTS: jamie@140: *result_format = XTRACT_BARK_COEFFS; andrea@211: *result_unit = (xtract_unit_t)XTRACT_UNKNOWN; /* FIX: check */ jamie@140: break; jamie@140: case XTRACT_PEAK_SPECTRUM: jamie@140: case XTRACT_SPECTRUM: jamie@140: case XTRACT_HARMONIC_SPECTRUM: jamie@140: *result_format = XTRACT_SPECTRAL; jamie@140: *result_unit = XTRACT_ANY_AMPLITUDE_HERTZ; jamie@140: break; jamie@140: case XTRACT_AUTOCORRELATION_FFT: jamie@140: break; jamie@140: case XTRACT_MFCC: jamie@140: *result_format = XTRACT_MEL_COEFFS; andrea@211: *result_unit = (xtract_unit_t)XTRACT_UNKNOWN; /* FIX: check */ jamie@140: break; jamie@140: case XTRACT_LPC: jamie@140: *result_format = XTRACT_LPC_COEFFS; andrea@211: *result_unit = (xtract_unit_t)XTRACT_UNKNOWN; jamie@140: break; jamie@140: case XTRACT_LPCC: jamie@140: *result_format = XTRACT_LPCC_COEFFS; andrea@211: *result_unit = (xtract_unit_t)XTRACT_UNKNOWN; jamie@140: break; jamie@140: default: jamie@140: break; jamie@108: } jamie@108: } jamie@50: } jamie@50: jamie@50: return fd; jamie@50: } jamie@50: jamie@140: int xtract_free_descriptors(xtract_function_descriptor_t *fd) jamie@140: { jamie@50: jamie@140: if (fd != NULL) jamie@140: { jamie@108: free(fd); jamie@50: } jamie@50: jamie@56: return XTRACT_SUCCESS; jamie@50: } jamie@50: jamie@50: jamie@50: jamie@50: jamie@50: