Mercurial > hg > libxtract
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: |