comparison src/descriptors.c @ 115:6c5ece9cba3a

- Added to pd example the ability to differentiate between different argv types (XTRACT_FLOAT, XTRACT_INT) and pass the correct data type to the xtract[]() function - Added xtract_flatness_db() details to descriptors.c - Fixes to tonality and xtract_subbands descriptors - Added Pd examples for 'subband mean' and tonality calculated using subbands
author Jamie Bullock <jamie@postlude.co.uk>
date Sat, 16 Feb 2008 20:13:05 +0000
parents f5040ed4e555
children efb1c1ae2ba8
comparison
equal deleted inserted replaced
114:f5040ed4e555 115:6c5ece9cba3a
69 case XTRACT_LPC: 69 case XTRACT_LPC:
70 case XTRACT_LPCC: 70 case XTRACT_LPCC:
71 *argv_min = XTRACT_ANY; 71 *argv_min = XTRACT_ANY;
72 *argv_max = XTRACT_ANY; 72 *argv_max = XTRACT_ANY;
73 *argv_def = XTRACT_ANY; 73 *argv_def = XTRACT_ANY;
74 *argv_unit = XTRACT_ANY; 74 *argv_unit = XTRACT_DBFS;
75 break; 75 break;
76 case XTRACT_SPECTRAL_INHARMONICITY: 76 case XTRACT_SPECTRAL_INHARMONICITY:
77 *argv_min = 0.f; 77 *argv_min = 0.f;
78 *argv_max = XTRACT_SR_UPPER_LIMIT / 2; 78 *argv_max = XTRACT_SR_UPPER_LIMIT / 2;
79 *argv_def = XTRACT_FUNDAMENTAL_DEFAULT; 79 *argv_def = XTRACT_FUNDAMENTAL_DEFAULT;
83 case XTRACT_FAILSAFE_F0: 83 case XTRACT_FAILSAFE_F0:
84 *argv_min = XTRACT_SR_LOWER_LIMIT; 84 *argv_min = XTRACT_SR_LOWER_LIMIT;
85 *argv_max = XTRACT_SR_UPPER_LIMIT; 85 *argv_max = XTRACT_SR_UPPER_LIMIT;
86 *argv_def = XTRACT_SR_DEFAULT; 86 *argv_def = XTRACT_SR_DEFAULT;
87 *argv_unit = XTRACT_HERTZ; 87 *argv_unit = XTRACT_HERTZ;
88 break;
89 case XTRACT_FLATNESS_DB:
90 *argv_min = 0;
91 *argv_max = 1.0;
92 *argv_def = XTRACT_ANY;
93 *argv_unit = XTRACT_DBFS;
88 break; 94 break;
89 /* argc = 2 */; 95 /* argc = 2 */;
90 case XTRACT_ROLLOFF: 96 case XTRACT_ROLLOFF:
91 *argv_min = XTRACT_FFT_BANDS_MIN; 97 *argv_min = XTRACT_FFT_BANDS_MIN;
92 *argv_max = XTRACT_FFT_BANDS_MAX; 98 *argv_max = XTRACT_FFT_BANDS_MAX;
163 *(argv_min + 2) = 0; 169 *(argv_min + 2) = 0;
164 *(argv_max + 2) = 32; 170 *(argv_max + 2) = 32;
165 *(argv_def + 2) = 0; 171 *(argv_def + 2) = 0;
166 *(argv_unit + 2) = XTRACT_NONE; 172 *(argv_unit + 2) = XTRACT_NONE;
167 *(argv_min + 3) = 0; 173 *(argv_min + 3) = 0;
168 *(argv_max + 3) = 1; 174 *(argv_max + 3) = XTRACT_ANY;
169 *(argv_def + 3) = 0; 175 *(argv_def + 3) = 0;
170 *(argv_unit + 3) = XTRACT_NONE; 176 *(argv_unit + 3) = XTRACT_BINS;
171 break; 177 break;
172 case XTRACT_BARK_COEFFICIENTS: 178 case XTRACT_BARK_COEFFICIENTS:
173 /* BARK_COEFFICIENTS is special because argc = BARK_BANDS */ 179 /* BARK_COEFFICIENTS is special because argc = BARK_BANDS */
174 case XTRACT_WINDOWED: 180 case XTRACT_WINDOWED:
175 /* WINDOWED is special because argc = window size = N */ 181 /* WINDOWED is special because argc = window size = N */
204 *argv_donor = XTRACT_SPECTRAL_MEAN; 210 *argv_donor = XTRACT_SPECTRAL_MEAN;
205 break; 211 break;
206 case XTRACT_SPECTRAL_INHARMONICITY: 212 case XTRACT_SPECTRAL_INHARMONICITY:
207 *argv_donor = XTRACT_FAILSAFE_F0; 213 *argv_donor = XTRACT_FAILSAFE_F0;
208 break; 214 break;
215 case XTRACT_FLATNESS_DB:
216 *argv_donor = XTRACT_FLATNESS;
217 break;
209 case XTRACT_TONALITY: 218 case XTRACT_TONALITY:
210 *argv_donor = XTRACT_FLATNESS; 219 *argv_donor = XTRACT_FLATNESS_DB;
211 break; 220 break;
212 case XTRACT_LOWEST_VALUE: 221 case XTRACT_LOWEST_VALUE:
213 case XTRACT_F0: 222 case XTRACT_F0:
214 case XTRACT_FAILSAFE_F0: 223 case XTRACT_FAILSAFE_F0:
215 *argv_donor = XTRACT_ANY; 224 *argv_donor = XTRACT_ANY;
247 *argv_donor = XTRACT_HIGHEST_VALUE; 256 *argv_donor = XTRACT_HIGHEST_VALUE;
248 *(argv_donor + 1) = XTRACT_MEAN; 257 *(argv_donor + 1) = XTRACT_MEAN;
249 break; 258 break;
250 /* argc = 4 */ 259 /* argc = 4 */
251 case XTRACT_SPECTRUM: 260 case XTRACT_SPECTRUM:
261 *argv_donor = XTRACT_ANY;
262 *(argv_donor + 1) = XTRACT_ANY;
263 *(argv_donor + 2) = XTRACT_ANY;
264 *(argv_donor + 3) = XTRACT_ANY;
265 break;
266 case XTRACT_SUBBANDS:
252 *argv_donor = XTRACT_ANY; 267 *argv_donor = XTRACT_ANY;
253 *(argv_donor + 1) = XTRACT_ANY; 268 *(argv_donor + 1) = XTRACT_ANY;
254 *(argv_donor + 2) = XTRACT_ANY; 269 *(argv_donor + 2) = XTRACT_ANY;
255 *(argv_donor + 3) = XTRACT_ANY; 270 *(argv_donor + 3) = XTRACT_ANY;
256 break; 271 break;
302 case XTRACT_FLATNESS: 317 case XTRACT_FLATNESS:
303 case XTRACT_SPREAD: 318 case XTRACT_SPREAD:
304 case XTRACT_POWER: 319 case XTRACT_POWER:
305 case XTRACT_HPS: 320 case XTRACT_HPS:
306 case XTRACT_PEAK_SPECTRUM: 321 case XTRACT_PEAK_SPECTRUM:
322 case XTRACT_SUBBANDS:
307 case XTRACT_MFCC: 323 case XTRACT_MFCC:
308 *data_format = XTRACT_SPECTRAL_MAGNITUDES; 324 *data_format = XTRACT_SPECTRAL_MAGNITUDES;
309 break; 325 break;
310 case XTRACT_LPC: 326 case XTRACT_LPC:
311 *data_format = XTRACT_AUTOCORRELATION_COEFFS; 327 *data_format = XTRACT_AUTOCORRELATION_COEFFS;
333 case XTRACT_FLUX: 349 case XTRACT_FLUX:
334 case XTRACT_LNORM: 350 case XTRACT_LNORM:
335 *data_format = XTRACT_AUDIO_SAMPLES; 351 *data_format = XTRACT_AUDIO_SAMPLES;
336 break; 352 break;
337 case XTRACT_TONALITY: 353 case XTRACT_TONALITY:
354 case XTRACT_FLATNESS_DB:
338 *data_format = XTRACT_NO_DATA; 355 *data_format = XTRACT_NO_DATA;
339 break; 356 break;
340 case XTRACT_TRISTIMULUS_1: 357 case XTRACT_TRISTIMULUS_1:
341 case XTRACT_TRISTIMULUS_2: 358 case XTRACT_TRISTIMULUS_2:
342 case XTRACT_TRISTIMULUS_3: 359 case XTRACT_TRISTIMULUS_3:
392 case XTRACT_AUTOCORRELATION_FFT: 409 case XTRACT_AUTOCORRELATION_FFT:
393 case XTRACT_ROLLOFF: 410 case XTRACT_ROLLOFF:
394 case XTRACT_NOISINESS: 411 case XTRACT_NOISINESS:
395 case XTRACT_CREST: 412 case XTRACT_CREST:
396 case XTRACT_FLATNESS: 413 case XTRACT_FLATNESS:
414 case XTRACT_FLATNESS_DB:
397 case XTRACT_POWER: 415 case XTRACT_POWER:
398 case XTRACT_BARK_COEFFICIENTS: 416 case XTRACT_BARK_COEFFICIENTS:
399 case XTRACT_RMS_AMPLITUDE: 417 case XTRACT_RMS_AMPLITUDE:
400 case XTRACT_SMOOTHNESS: 418 case XTRACT_SMOOTHNESS:
401 case XTRACT_SPREAD: 419 case XTRACT_SPREAD:
406 case XTRACT_LOUDNESS: 424 case XTRACT_LOUDNESS:
407 case XTRACT_NONZERO_COUNT: 425 case XTRACT_NONZERO_COUNT:
408 case XTRACT_LPC: 426 case XTRACT_LPC:
409 case XTRACT_LPCC: 427 case XTRACT_LPCC:
410 case XTRACT_WINDOWED: 428 case XTRACT_WINDOWED:
429 case XTRACT_SUBBANDS:
411 *data_unit = XTRACT_ANY; 430 *data_unit = XTRACT_ANY;
412 break; 431 break;
413 case XTRACT_SPECTRAL_MEAN: 432 case XTRACT_SPECTRAL_MEAN:
414 case XTRACT_SPECTRAL_VARIANCE: 433 case XTRACT_SPECTRAL_VARIANCE:
415 case XTRACT_SPECTRAL_STANDARD_DEVIATION: 434 case XTRACT_SPECTRAL_STANDARD_DEVIATION:
442 strcpy(name, "mean"); 461 strcpy(name, "mean");
443 strcpy(p_name, "Mean"); 462 strcpy(p_name, "Mean");
444 strcpy(desc, "Extract the mean of an input vector"); 463 strcpy(desc, "Extract the mean of an input vector");
445 strcpy(p_desc, "Extract the mean of a range of values"); 464 strcpy(p_desc, "Extract the mean of a range of values");
446 strcpy(author, ""); 465 strcpy(author, "");
447 d->argv.type = XTRACT_NONE;
448 break; 466 break;
449 case XTRACT_VARIANCE: 467 case XTRACT_VARIANCE:
450 strcpy(name, "variance"); 468 strcpy(name, "variance");
451 strcpy(p_name, "Variance"); 469 strcpy(p_name, "Variance");
452 strcpy(desc, "Extract the variance of an input vector"); 470 strcpy(desc, "Extract the variance of an input vector");
658 strcpy(p_desc, 676 strcpy(p_desc,
659 "Extract LPC cepstrum from LPC coefficients"); 677 "Extract LPC cepstrum from LPC coefficients");
660 strcpy(author, "Rabiner and Juang"); 678 strcpy(author, "Rabiner and Juang");
661 *year = 1993; 679 *year = 1993;
662 break; 680 break;
681 case XTRACT_SUBBANDS:
682 strcpy(name, "subbands");
683 strcpy(p_name, "Sub band coefficients");
684 strcpy(desc, "Extract subband coefficients from spectral magnitudes");
685 strcpy(p_desc,
686 "Extract subband coefficients from spectral magnitudes");
687 strcpy(author, "");
688 break;
663 case XTRACT_BARK_COEFFICIENTS: 689 case XTRACT_BARK_COEFFICIENTS:
664 strcpy(name, "bark_coefficients"); 690 strcpy(name, "bark_coefficients");
665 strcpy(p_name, "Bark Coefficients"); 691 strcpy(p_name, "Bark Coefficients");
666 strcpy(desc, "Extract bark coefficients from a spectrum"); 692 strcpy(desc, "Extract bark coefficients from a spectrum");
667 strcpy(p_desc, 693 strcpy(p_desc,
737 strcpy(desc, "Extract the spectral flatness of a spectrum"); 763 strcpy(desc, "Extract the spectral flatness of a spectrum");
738 strcpy(p_desc, 764 strcpy(p_desc,
739 "Extract the spectral flatness of an audio spectrum"); 765 "Extract the spectral flatness of an audio spectrum");
740 strcpy(author, "Tristan Jehan"); 766 strcpy(author, "Tristan Jehan");
741 *year = 2005; 767 *year = 2005;
768 break;
769 case XTRACT_FLATNESS_DB:
770 strcpy(name, "flatness_db");
771 strcpy(p_name, "Log Spectral Flatness");
772 strcpy(desc, "Extract the log spectral flatness of a spectrum");
773 strcpy(p_desc,
774 "Extract the log spectral flatness of an audio spectrum");
775 strcpy(author, "Peeters");
776 *year = 2003;
742 break; 777 break;
743 case XTRACT_SPREAD: 778 case XTRACT_SPREAD:
744 strcpy(name, "spread"); 779 strcpy(name, "spread");
745 strcpy(p_name, "Spectral Spread"); 780 strcpy(p_name, "Spectral Spread");
746 strcpy(desc, "Extract the spectral spread of a spectrum"); 781 strcpy(desc, "Extract the spectral spread of a spectrum");
931 case XTRACT_SPECTRAL_AVERAGE_DEVIATION: 966 case XTRACT_SPECTRAL_AVERAGE_DEVIATION:
932 case XTRACT_SPECTRAL_INHARMONICITY: 967 case XTRACT_SPECTRAL_INHARMONICITY:
933 case XTRACT_LOWEST_VALUE: 968 case XTRACT_LOWEST_VALUE:
934 case XTRACT_F0: 969 case XTRACT_F0:
935 case XTRACT_FAILSAFE_F0: 970 case XTRACT_FAILSAFE_F0:
971 case XTRACT_FLATNESS_DB:
936 case XTRACT_TONALITY: 972 case XTRACT_TONALITY:
937 *argc = 1; 973 *argc = 1;
938 *argv_type = XTRACT_FLOAT; 974 *argv_type = XTRACT_FLOAT;
939 break; 975 break;
940 case XTRACT_SKEWNESS: 976 case XTRACT_SKEWNESS:
952 *argv_type = XTRACT_FLOAT; 988 *argv_type = XTRACT_FLOAT;
953 break; 989 break;
954 case XTRACT_SPECTRUM: 990 case XTRACT_SPECTRUM:
955 *argc = 4; 991 *argc = 4;
956 *argv_type = XTRACT_FLOAT; 992 *argv_type = XTRACT_FLOAT;
993 break;
994 case XTRACT_SUBBANDS:
995 *argc = 4;
996 *argv_type = XTRACT_INT;
957 break; 997 break;
958 case XTRACT_MFCC: 998 case XTRACT_MFCC:
959 *argc = 1; 999 *argc = 1;
960 *argv_type = XTRACT_MEL_FILTER; 1000 *argv_type = XTRACT_MEL_FILTER;
961 break; 1001 break;
1032 case XTRACT_SPREAD: 1072 case XTRACT_SPREAD:
1033 case XTRACT_ZCR: 1073 case XTRACT_ZCR:
1034 case XTRACT_ROLLOFF: 1074 case XTRACT_ROLLOFF:
1035 case XTRACT_LOUDNESS: 1075 case XTRACT_LOUDNESS:
1036 case XTRACT_FLATNESS: 1076 case XTRACT_FLATNESS:
1077 case XTRACT_FLATNESS_DB:
1037 case XTRACT_TONALITY: 1078 case XTRACT_TONALITY:
1038 case XTRACT_CREST: 1079 case XTRACT_CREST:
1039 case XTRACT_NOISINESS: 1080 case XTRACT_NOISINESS:
1040 case XTRACT_RMS_AMPLITUDE: 1081 case XTRACT_RMS_AMPLITUDE:
1041 case XTRACT_SPECTRAL_INHARMONICITY: 1082 case XTRACT_SPECTRAL_INHARMONICITY:
1058 case XTRACT_AMDF: 1099 case XTRACT_AMDF:
1059 case XTRACT_ASDF: 1100 case XTRACT_ASDF:
1060 case XTRACT_BARK_COEFFICIENTS: 1101 case XTRACT_BARK_COEFFICIENTS:
1061 case XTRACT_PEAK_SPECTRUM: 1102 case XTRACT_PEAK_SPECTRUM:
1062 case XTRACT_SPECTRUM: 1103 case XTRACT_SPECTRUM:
1104 case XTRACT_SUBBANDS:
1063 case XTRACT_AUTOCORRELATION_FFT: 1105 case XTRACT_AUTOCORRELATION_FFT:
1064 case XTRACT_MFCC: 1106 case XTRACT_MFCC:
1065 case XTRACT_LPC: 1107 case XTRACT_LPC:
1066 case XTRACT_LPCC: 1108 case XTRACT_LPCC:
1067 case XTRACT_DCT: 1109 case XTRACT_DCT:
1106 case XTRACT_SPREAD: 1148 case XTRACT_SPREAD:
1107 case XTRACT_ZCR: 1149 case XTRACT_ZCR:
1108 case XTRACT_ROLLOFF: 1150 case XTRACT_ROLLOFF:
1109 case XTRACT_LOUDNESS: 1151 case XTRACT_LOUDNESS:
1110 case XTRACT_FLATNESS: 1152 case XTRACT_FLATNESS:
1153 case XTRACT_FLATNESS_DB:
1111 case XTRACT_TONALITY: 1154 case XTRACT_TONALITY:
1112 case XTRACT_CREST: 1155 case XTRACT_CREST:
1113 case XTRACT_NOISINESS: 1156 case XTRACT_NOISINESS:
1114 case XTRACT_RMS_AMPLITUDE: 1157 case XTRACT_RMS_AMPLITUDE:
1115 case XTRACT_SPECTRAL_INHARMONICITY: 1158 case XTRACT_SPECTRAL_INHARMONICITY:
1128 case XTRACT_AMDF: 1171 case XTRACT_AMDF:
1129 case XTRACT_ASDF: 1172 case XTRACT_ASDF:
1130 case XTRACT_BARK_COEFFICIENTS: 1173 case XTRACT_BARK_COEFFICIENTS:
1131 case XTRACT_PEAK_SPECTRUM: 1174 case XTRACT_PEAK_SPECTRUM:
1132 case XTRACT_SPECTRUM: 1175 case XTRACT_SPECTRUM:
1176 case XTRACT_SUBBANDS:
1133 case XTRACT_AUTOCORRELATION_FFT: 1177 case XTRACT_AUTOCORRELATION_FFT:
1134 case XTRACT_MFCC: 1178 case XTRACT_MFCC:
1135 case XTRACT_LPC: 1179 case XTRACT_LPC:
1136 case XTRACT_LPCC: 1180 case XTRACT_LPCC:
1137 case XTRACT_DCT: 1181 case XTRACT_DCT:
1202 case XTRACT_ODD_EVEN_RATIO: 1246 case XTRACT_ODD_EVEN_RATIO:
1203 *result_unit = XTRACT_NONE; 1247 *result_unit = XTRACT_NONE;
1204 *result_min = 0.f; 1248 *result_min = 0.f;
1205 *result_max = 1.f; 1249 *result_max = 1.f;
1206 break; 1250 break;
1251 case XTRACT_FLATNESS_DB:
1252 *result_unit = XTRACT_DBFS;
1253 *result_min = XTRACT_ANY; /* FIX: check this */
1254 *result_max = XTRACT_ANY;
1255 break;
1207 case XTRACT_LOUDNESS: 1256 case XTRACT_LOUDNESS:
1208 case XTRACT_FLATNESS: 1257 case XTRACT_FLATNESS:
1209 case XTRACT_TONALITY: 1258 case XTRACT_TONALITY:
1210 case XTRACT_CREST: 1259 case XTRACT_CREST:
1211 case XTRACT_SPECTRAL_INHARMONICITY: 1260 case XTRACT_SPECTRAL_INHARMONICITY:
1231 switch(f) { 1280 switch(f) {
1232 case XTRACT_AUTOCORRELATION: 1281 case XTRACT_AUTOCORRELATION:
1233 case XTRACT_AMDF: 1282 case XTRACT_AMDF:
1234 case XTRACT_ASDF: 1283 case XTRACT_ASDF:
1235 case XTRACT_DCT: 1284 case XTRACT_DCT:
1285 case XTRACT_SUBBANDS:
1236 case XTRACT_WINDOWED: 1286 case XTRACT_WINDOWED:
1237 *result_format = XTRACT_ARBITRARY_SERIES; 1287 *result_format = XTRACT_ARBITRARY_SERIES;
1238 *result_unit = XTRACT_ANY; 1288 *result_unit = XTRACT_ANY;
1239 break; 1289 break;
1240 case XTRACT_BARK_COEFFICIENTS: 1290 case XTRACT_BARK_COEFFICIENTS: