*/
+#include "config.h"
+
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+
extern int verbose;
// input / output
extern int usejack;
// onset stuff
extern char_t * onset_method;
extern smpl_t onset_threshold;
+extern smpl_t onset_minioi;
// pitch stuff
extern char_t * pitch_method;
extern char_t * pitch_unit;
extern smpl_t pitch_tolerance;
+// time stuff
+extern uint_t time_format;
// tempo stuff
extern char_t * tempo_method;
// more general stuff
extern smpl_t silence_threshold;
extern uint_t mix_input;
+// midi tap
+extern smpl_t miditap_note;
+extern smpl_t miditap_velo;
extern uint_t force_overwrite;
void usage (FILE * stream, int exit_code)
{
+#ifdef HAVE_GETOPT_H
fprintf (stream, "usage: %s [ options ] \n", prog_name);
fprintf (stream,
" -i --input input file\n"
" -o --output output file\n"
#endif
" -r --samplerate select samplerate\n"
+ " use 0 to use input source samplerate, or 32000 to force 32kHz\n"
" -B --bufsize set buffer size\n"
+ " number of frames to run the analysis on\n"
" -H --hopsize set hopsize\n"
+ " number of frames to read from source before each analysis\n"
#ifdef PROG_HAS_ONSET
" -O --onset select onset detection algorithm\n"
+ " <default|energy|hfc|complex|phase|specdiff|kl|mkl|specflux>;\n"
+ " default=hfc\n"
" -t --onset-threshold set onset detection threshold\n"
+ " a value between 0.1 (more detections) and 1 (less); default=0.3\n"
+ " -M --minioi set minimum inter-onset interval\n"
+ " a value in second; default=0.012\n"
#endif /* PROG_HAS_ONSET */
#ifdef PROG_HAS_PITCH
" -p --pitch select pitch detection algorithm\n"
+ " <default|yinfft|yin|mcomb|fcomb|schmitt>; default=yinfft\n"
" -u --pitch-unit select pitch output unit\n"
+ " <default|freq|hertz|Hz|midi|cent|bin>; default=freq\n"
" -l --pitch-tolerance select pitch tolerance\n"
+ " (yin, yinfft only) a value between 0.1 and 0.7; default=0.3\n"
#endif /* PROG_HAS_PITCH */
+#ifdef PROG_HAS_SILENCE
" -s --silence select silence threshold\n"
+ " a value in dB, for instance -70, or -100; default=-90\n"
+#endif /* PROG_HAS_SILENCE */
+ " -T --time-format select time values output format\n"
+ " (samples, ms, seconds) default=seconds\n"
#ifdef PROG_HAS_OUTPUT
" -m --mix-input mix input signal with output signal\n"
+ " input signal will be added to output synthesis\n"
" -f --force-overwrite overwrite output file if needed\n"
-#endif
+ " do not fail if output file already exists\n"
+#endif /* PROG_HAS_OUTPUT */
#ifdef PROG_HAS_JACK
" -j --jack use Jack\n"
-#endif
+#if defined(PROG_HAS_ONSET) && !defined(PROG_HAS_PITCH)
+ " -n --miditap-note MIDI note\n"
+ " -V --miditap-velo MIDI velocity\n"
+#endif /* defined(PROG_HAS_ONSET) && !defined(PROG_HAS_PITCH) */
+#endif /* PROG_HAS_JACK */
" -v --verbose be verbose\n"
" -h --help display this message\n"
);
+#else /* HAVE_GETOPT_H */
+ fprintf (stream, "warning: compiled with getopt.h, no argument parsing\n");
+ fprintf (stream, "usage: %s <filename> \n", prog_name);
+#endif /* HAVE_GETOPT_H */
exit (exit_code);
}
int
parse_args (int argc, char **argv)
{
+#ifdef HAVE_GETOPT_H
const char *options = "hv"
"i:r:B:H:"
#ifdef PROG_HAS_JACK
"j"
+#if defined(PROG_HAS_ONSET) && !defined(PROG_HAS_PITCH)
+ "N:V:"
+#endif /* defined(PROG_HAS_ONSET) && !defined(PROG_HAS_PITCH) */
#endif /* PROG_HAS_JACK */
#ifdef PROG_HAS_OUTPUT
"o:"
#endif /* PROG_HAS_OUTPUT */
#ifdef PROG_HAS_ONSET
- "O:t:"
+ "O:t:M:"
#endif /* PROG_HAS_ONSET */
#ifdef PROG_HAS_PITCH
"p:u:l:"
#endif /* PROG_HAS_PITCH */
- "s:mf";
+ "T:"
+#ifdef PROG_HAS_SILENCE
+ "s:"
+#endif /* PROG_HAS_SILENCE */
+#ifdef PROG_HAS_OUTPUT
+ "mf"
+#endif /* PROG_HAS_OUTPUT */
+ ;
int next_option;
struct option long_options[] = {
{"help", 0, NULL, 'h'},
{"hopsize", 1, NULL, 'H'},
#ifdef PROG_HAS_JACK
{"jack", 0, NULL, 'j'},
+#if defined(PROG_HAS_ONSET) && !defined(PROG_HAS_PITCH)
+ {"miditap-note", 1, NULL, 'n'},
+ {"miditap-velo", 1, NULL, 'V'},
+#endif /* PROG_HAS_ONSET !PROG_HAS_PITCH */
#endif /* PROG_HAS_JACK */
#ifdef PROG_HAS_OUTPUT
{"output", 1, NULL, 'o'},
#ifdef PROG_HAS_ONSET
{"onset", 1, NULL, 'O'},
{"onset-threshold", 1, NULL, 't'},
+ {"onset-minioi", 1, NULL, 'M'},
#endif /* PROG_HAS_ONSET */
#ifdef PROG_HAS_PITCH
{"pitch", 1, NULL, 'p'},
{"pitch-unit", 1, NULL, 'u'},
{"pitch-tolerance", 1, NULL, 'l'},
#endif /* PROG_HAS_PITCH */
+#ifdef PROG_HAS_SILENCE
{"silence", 1, NULL, 's'},
+#endif /* PROG_HAS_SILENCE */
+ {"time-format", 1, NULL, 'T'},
+#ifdef PROG_HAS_OUTPUT
{"mix-input", 0, NULL, 'm'},
{"force-overwrite", 0, NULL, 'f'},
+#endif /* PROG_HAS_OUTPUT */
{NULL, 0, NULL, 0}
};
+#endif /* HAVE_GETOPT_H */
prog_name = argv[0];
if (argc < 1) {
usage (stderr, 1);
return -1;
}
+#ifdef HAVE_GETOPT_H
do {
next_option = getopt_long (argc, argv, options, long_options, NULL);
switch (next_option) {
case 'j':
usejack = 1;
break;
+ case 'n':
+ miditap_note = atoi (optarg);
+ break;
+ case 'V':
+ miditap_velo = atoi (optarg);
+ break;
case 'i':
source_uri = optarg;
break;
case 't': /* threshold value for onset */
onset_threshold = (smpl_t) atof (optarg);
break;
+ case 'M': /* minimum inter-onset-interval */
+ onset_minioi = (smpl_t) atof (optarg);
+ break;
case 'p':
pitch_method = optarg;
break;
case 'l':
pitch_tolerance = (smpl_t) atof (optarg);
break;
+ case 'T':
+ if (strcmp (optarg, "samples") == 0) {
+ time_format = 2;
+ } else if (strcmp (optarg, "ms") == 0) {
+ time_format = 1;
+ } else if (strcmp (optarg, "seconds") == 0) {
+ time_format = 0;
+ } else {
+ errmsg ("Warning: did not get '%s' time-format string\n", optarg);
+ }
+ break;
case 's': /* silence threshold */
silence_threshold = (smpl_t) atof (optarg);
break;
}
}
while (next_option != -1);
+#else /* HAVE_GETOPT_H */
+ int optind = 1;
+#endif /* HAVE_GETOPT_H */
// if unique, use the non option argument as the source
if ( source_uri == NULL ) {