annotate src/descriptors.c @ 50:435be4a78aac

Added function descriptors
author Jamie Bullock <jamie@postlude.co.uk>
date Fri, 22 Dec 2006 20:13:02 +0000
parents
children 5306739416cf
rev   line source
jamie@50 1 /* libxtract feature extraction library
jamie@50 2 *
jamie@50 3 * Copyright (C) 2006 Jamie Bullock
jamie@50 4 *
jamie@50 5 * This program is free software; you can redistribute it and/or modify
jamie@50 6 * it under the terms of the GNU General Public License as published by
jamie@50 7 * the Free Software Foundation; either version 2 of the License, or
jamie@50 8 * (at your option) any later version.
jamie@50 9 *
jamie@50 10 * This program is distributed in the hope that it will be useful,
jamie@50 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jamie@50 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
jamie@50 13 * GNU General Public License for more details.
jamie@50 14 *
jamie@50 15 * You should have received a copy of the GNU General Public License
jamie@50 16 * along with this program; if not, write to the Free Software
jamie@50 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
jamie@50 18 * USA.
jamie@50 19 */
jamie@50 20
jamie@50 21 #include "xtract/libxtract.h"
jamie@50 22 #include <stdlib.h>
jamie@50 23 #include <string.h>
jamie@50 24 #define XTRACT
jamie@50 25
jamie@50 26 void *xtract_make_descriptors(){
jamie@50 27
jamie@50 28 t_function_descriptor *fd, *d;
jamie@50 29 int f , F;
jamie@50 30 char *name, *pretty_name;
jamie@50 31 int *n_args;
jamie@50 32
jamie@50 33 f = F = XTRACT_FEATURES;
jamie@50 34
jamie@50 35 fd = malloc(XTRACT_FEATURES * sizeof(t_function_descriptor));
jamie@50 36
jamie@50 37 while(f--){
jamie@50 38 d = &fd[f];
jamie@50 39 switch(f){
jamie@50 40 case MEAN:
jamie@50 41 case VARIANCE:
jamie@50 42 case STANDARD_DEVIATION:
jamie@50 43 case AVERAGE_DEVIATION:
jamie@50 44 case ROLLOFF:
jamie@50 45 case INHARMONICITY:
jamie@50 46 case MAGNITUDE_SPECTRUM:
jamie@50 47 case ODD_EVEN_RATIO:
jamie@50 48 case LOWEST_VALUE:
jamie@50 49 case F0:
jamie@50 50 case FAILSAFE_F0:
jamie@50 51 case TONALITY:
jamie@50 52 d->n_args = 1;
jamie@50 53 d->argv.type = FLOAT;
jamie@50 54 break;
jamie@50 55 case SKEWNESS:
jamie@50 56 case KURTOSIS:
jamie@50 57 case PEAKS:
jamie@50 58 case HARMONICS:
jamie@50 59 case NOISINESS:
jamie@50 60 case CREST:
jamie@50 61 d->n_args = 2;
jamie@50 62 d->argv.type = FLOAT;
jamie@50 63 break;
jamie@50 64 case MFCC:
jamie@50 65 d->n_args = 1;
jamie@50 66 d->argv.type = MEL_FILTER;
jamie@50 67 break;
jamie@50 68 case BARK_COEFFICIENTS:
jamie@50 69 d->n_args = BARK_BANDS;
jamie@50 70 d->argv.type = INT;
jamie@50 71 break;
jamie@50 72 case CENTROID:
jamie@50 73 case IRREGULARITY_K:
jamie@50 74 case IRREGULARITY_J:
jamie@50 75 case TRISTIMULUS_1:
jamie@50 76 case TRISTIMULUS_2:
jamie@50 77 case TRISTIMULUS_3:
jamie@50 78 case SMOOTHNESS:
jamie@50 79 case FLATNESS:
jamie@50 80 case SPREAD:
jamie@50 81 case ZCR:
jamie@50 82 case LOUDNESS:
jamie@50 83 case HIGHEST_VALUE:
jamie@50 84 case SUM:
jamie@50 85 case RMS_AMPLITUDE:
jamie@50 86 case POWER:
jamie@50 87 case SHARPNESS:
jamie@50 88 case SLOPE:
jamie@50 89 case HPS:
jamie@50 90 case FLUX:
jamie@50 91 case ATTACK_TIME:
jamie@50 92 case DECAY_TIME:
jamie@50 93 case DELTA_FEATURE:
jamie@50 94 case AUTOCORRELATION_FFT:
jamie@50 95 case DCT:
jamie@50 96 case AUTOCORRELATION:
jamie@50 97 case AMDF:
jamie@50 98 case ASDF:
jamie@50 99 d->n_args = 0;
jamie@50 100 break;
jamie@50 101 default:
jamie@50 102 d->n_args = 0;
jamie@50 103 break;
jamie@50 104 }
jamie@50 105 name = d->algo.name;
jamie@50 106 pretty_name = d->algo.pretty_name;
jamie@50 107 n_args = d->n_args;
jamie@50 108 switch(f){
jamie@50 109 case MEAN:
jamie@50 110 strcpy(name, "mean");
jamie@50 111 strcpy(pretty_name, "Mean");
jamie@50 112 break;
jamie@50 113 case VARIANCE:
jamie@50 114 strcpy(name, "variance");
jamie@50 115 strcpy(pretty_name, "Variance");
jamie@50 116 break;
jamie@50 117 case STANDARD_DEVIATION:
jamie@50 118 strcpy(name, "standard_deviation");
jamie@50 119 strcpy(pretty_name, "Standard Deviation");
jamie@50 120 break;
jamie@50 121 case AVERAGE_DEVIATION:
jamie@50 122 strcpy(name, "average_deviation");
jamie@50 123 strcpy(pretty_name, "Average Deviation");
jamie@50 124 break;
jamie@50 125 case ROLLOFF:
jamie@50 126 strcpy(name, "rolloff");
jamie@50 127 strcpy(pretty_name, "Spectral Rolloff");
jamie@50 128 break;
jamie@50 129 case INHARMONICITY:
jamie@50 130 strcpy(name, "inharmonicity");
jamie@50 131 strcpy(pretty_name, "Inharmonicity");
jamie@50 132 break;
jamie@50 133 case MAGNITUDE_SPECTRUM:
jamie@50 134 strcpy(name, "magnitude_spectrum");
jamie@50 135 strcpy(pretty_name, "Magnitude Spectrum");
jamie@50 136 break;
jamie@50 137 case ODD_EVEN_RATIO:
jamie@50 138 strcpy(name, "odd_even_ratio");
jamie@50 139 strcpy(pretty_name, "Odd/Even Harmonic Ratio");
jamie@50 140 break;
jamie@50 141 case LOWEST_VALUE:
jamie@50 142 strcpy(name, "lowest_value");
jamie@50 143 strcpy(pretty_name, "Lowest Value");
jamie@50 144 break;
jamie@50 145 case F0:
jamie@50 146 strcpy(name, "f0");
jamie@50 147 strcpy(pretty_name, "Fundamental Frequency");
jamie@50 148 break;
jamie@50 149 case FAILSAFE_F0:
jamie@50 150 strcpy(name, "failsafe_f0");
jamie@50 151 strcpy(pretty_name, "Fundamental Frequency (failsafe)");
jamie@50 152 break;
jamie@50 153 case TONALITY:
jamie@50 154 strcpy(name, "tonality");
jamie@50 155 strcpy(pretty_name, "Tonality");
jamie@50 156 break;
jamie@50 157 case SKEWNESS:
jamie@50 158 strcpy(name, "skewness");
jamie@50 159 strcpy(pretty_name, "Spectral Skewness");
jamie@50 160 break;
jamie@50 161 case KURTOSIS:
jamie@50 162 strcpy(name, "kurtosis");
jamie@50 163 strcpy(pretty_name, "Spectral Kurtosis");
jamie@50 164 break;
jamie@50 165 case PEAKS:
jamie@50 166 strcpy(name, "peaks");
jamie@50 167 strcpy(pretty_name, "Spectral Peaks");
jamie@50 168 break;
jamie@50 169 case HARMONICS:
jamie@50 170 strcpy(name, "harmonics");
jamie@50 171 strcpy(pretty_name, "Spectral Harmonics");
jamie@50 172 break;
jamie@50 173 case NOISINESS:
jamie@50 174 strcpy(name, "noisiness");
jamie@50 175 strcpy(pretty_name, "Noisiness");
jamie@50 176 break;
jamie@50 177 case CREST:
jamie@50 178 strcpy(name, "crest");
jamie@50 179 strcpy(pretty_name, "Spectral Crest Measure");
jamie@50 180 break;
jamie@50 181 case MFCC:
jamie@50 182 strcpy(name, "mfcc");
jamie@50 183 strcpy(pretty_name, "Mel Frequency Cepstral Coefficients");
jamie@50 184 break;
jamie@50 185 case BARK_COEFFICIENTS:
jamie@50 186 strcpy(name, "bark_coefficients");
jamie@50 187 strcpy(pretty_name, "Bark Coefficients");
jamie@50 188 break;
jamie@50 189 case CENTROID:
jamie@50 190 strcpy(name, "centroid");
jamie@50 191 strcpy(pretty_name, "Spectral Centroid");
jamie@50 192 break;
jamie@50 193 case IRREGULARITY_K:
jamie@50 194 strcpy(name, "irregularity_k");
jamie@50 195 strcpy(pretty_name, "Irregularity I");
jamie@50 196 break;
jamie@50 197 case IRREGULARITY_J:
jamie@50 198 strcpy(name, "irregularity_j");
jamie@50 199 strcpy(pretty_name, "Irregularity II");
jamie@50 200 break;
jamie@50 201 case TRISTIMULUS_1:
jamie@50 202 strcpy(name, "tristimulus_1");
jamie@50 203 strcpy(pretty_name, "Tristimulus I");
jamie@50 204 break;
jamie@50 205 case TRISTIMULUS_2:
jamie@50 206 strcpy(name, "tristimulus_2");
jamie@50 207 strcpy(pretty_name, "Tristimulus II");
jamie@50 208 break;
jamie@50 209 case TRISTIMULUS_3:
jamie@50 210 strcpy(name, "tristimulus_3");
jamie@50 211 strcpy(pretty_name, "Tristimulus III");
jamie@50 212 break;
jamie@50 213 case SMOOTHNESS:
jamie@50 214 strcpy(name, "smoothness");
jamie@50 215 strcpy(pretty_name, "Spectral Smoothness");
jamie@50 216 break;
jamie@50 217 case FLATNESS:
jamie@50 218 strcpy(name, "flatness");
jamie@50 219 strcpy(pretty_name, "Spectral Flatness");
jamie@50 220 break;
jamie@50 221 case SPREAD:
jamie@50 222 strcpy(name, "spread");
jamie@50 223 strcpy(pretty_name, "Spectral Spread");
jamie@50 224 break;
jamie@50 225 case ZCR:
jamie@50 226 strcpy(name, "zcr");
jamie@50 227 strcpy(pretty_name, "Zero Crossing Rate");
jamie@50 228 break;
jamie@50 229 case LOUDNESS:
jamie@50 230 strcpy(name, "loudness");
jamie@50 231 strcpy(pretty_name, "Loudness");
jamie@50 232 break;
jamie@50 233 case HIGHEST_VALUE:
jamie@50 234 strcpy(name, "highest_value");
jamie@50 235 strcpy(pretty_name, "Highest Value");
jamie@50 236 break;
jamie@50 237 case SUM:
jamie@50 238 strcpy(name, "sum");
jamie@50 239 strcpy(pretty_name, "Sum of Values");
jamie@50 240 break;
jamie@50 241 case RMS_AMPLITUDE:
jamie@50 242 strcpy(name, "rms_amplitude");
jamie@50 243 strcpy(pretty_name, "RMS Amplitude");
jamie@50 244 break;
jamie@50 245 case POWER:
jamie@50 246 strcpy(name, "power");
jamie@50 247 strcpy(pretty_name, "Spectral Power");
jamie@50 248 break;
jamie@50 249 case SHARPNESS:
jamie@50 250 strcpy(name, "sharpness");
jamie@50 251 strcpy(pretty_name, "Spectral Sharpness");
jamie@50 252 break;
jamie@50 253 case SLOPE:
jamie@50 254 strcpy(name, "slope");
jamie@50 255 strcpy(pretty_name, "Spectral Slope");
jamie@50 256 break;
jamie@50 257 case HPS:
jamie@50 258 strcpy(name, "hps");
jamie@50 259 strcpy(pretty_name, "Harmonic Product Spectrum");
jamie@50 260 break;
jamie@50 261 case FLUX:
jamie@50 262 strcpy(name, "flux");
jamie@50 263 strcpy(pretty_name, "Spectral Flux");
jamie@50 264 break;
jamie@50 265 case ATTACK_TIME:
jamie@50 266 strcpy(name, "attack_time");
jamie@50 267 strcpy(pretty_name, "Attack Time");
jamie@50 268 break;
jamie@50 269 case DECAY_TIME:
jamie@50 270 strcpy(name, "decay_time");
jamie@50 271 strcpy(pretty_name, "Decay Time");
jamie@50 272 break;
jamie@50 273 case DELTA_FEATURE:
jamie@50 274 strcpy(name, "delta_feature");
jamie@50 275 strcpy(pretty_name, "Delta Feature");
jamie@50 276 break;
jamie@50 277 case AUTOCORRELATION_FFT:
jamie@50 278 strcpy(name, "autocorrelation_fft");
jamie@50 279 strcpy(pretty_name, "Autocorrelation (FFT method)");
jamie@50 280 break;
jamie@50 281 case DCT:
jamie@50 282 strcpy(name, "dct");
jamie@50 283 strcpy(pretty_name, "Discrete Cosine Transform");
jamie@50 284 break;
jamie@50 285 case AUTOCORRELATION:
jamie@50 286 strcpy(name, "autocorrelation");
jamie@50 287 strcpy(pretty_name, "Autocorrelation");
jamie@50 288 break;
jamie@50 289 case AMDF:
jamie@50 290 strcpy(name, "amdf");
jamie@50 291 strcpy(pretty_name, "Average Magnitude Difference Function");
jamie@50 292 break;
jamie@50 293 case ASDF:
jamie@50 294 strcpy(name, "asdf");
jamie@50 295 strcpy(pretty_name, "Average Squared Difference Function");
jamie@50 296 break;
jamie@50 297 default:
jamie@50 298 break;
jamie@50 299 }
jamie@50 300 }
jamie@50 301
jamie@50 302 return fd;
jamie@50 303 }
jamie@50 304
jamie@50 305 int xtract_free_descriptors(void *fd){
jamie@50 306
jamie@50 307 if (fd != NULL) {
jamie@50 308 free(fd);
jamie@50 309 }
jamie@50 310
jamie@50 311 return SUCCESS;
jamie@50 312 }
jamie@50 313
jamie@50 314
jamie@50 315
jamie@50 316
jamie@50 317