Sigrid Solveig Haflínudóttirexamples: add a dumb /dev/audio supportd2af4083 years agoHistory
368 lines · 11.8 KB · C
RawDownload
/*  Copyright (C) 2003-2013 Paul Brossier <piem@aubio.org>   This file is part of aubio.   aubio is free software: you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation, either version 3 of the License, or  (at your option) any later version.   aubio is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.   You should have received a copy of the GNU General Public License  along with aubio.  If not, see <http://www.gnu.org/licenses/>. */ #include "config.h" #ifdef HAVE_GETOPT_H#include <getopt.h>#endif extern int verbose;extern int quiet;// input / outputextern int usejack;extern int usedevaudio;extern char_t *source_uri;extern char_t *sink_uri;// general stuffextern uint_t samplerate;extern uint_t buffer_size;extern uint_t hop_size;// onset stuffextern char_t * onset_method;extern smpl_t onset_threshold;extern smpl_t onset_minioi;// pitch stuffextern char_t * pitch_method;extern char_t * pitch_unit;extern smpl_t pitch_tolerance;// time stuffextern uint_t time_format;// tempo stuffextern char_t * tempo_method;// more general stuffextern smpl_t silence_threshold;extern smpl_t release_drop;extern uint_t mix_input;// midi tapextern smpl_t miditap_note;extern smpl_t miditap_velo; extern uint_t force_overwrite; // functions defined in utils.cextern void examples_common_init (int argc, char **argv);extern void examples_common_del (void);extern void examples_common_process (aubio_process_func_t process_func,    aubio_print_func_t print);int parse_args (int argc, char **argv); // internal stuffextern int blocks; extern fvec_t *input_buffer;extern fvec_t *output_buffer; const char *prog_name; void usage (FILE * stream, int exit_code); 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"#ifdef PROG_HAS_OUTPUT      "       -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|yinfast|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 */#ifdef PROG_HAS_NOTES      "       -d      --release-drop     select release drop threshold\n"      "                 a positive value in dB; default=10\n"#endif      "       -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"      "                 do not fail if output file already exists\n"#endif /* PROG_HAS_OUTPUT */#if defined(PROG_HAS_JACK) && defined(HAVE_JACK)      "       -j      --jack             use Jack\n"#if defined(PROG_HAS_ONSET) && !defined(PROG_HAS_PITCH)      "       -N      --miditap-note     MIDI note; default=69.\n"      "       -V      --miditap-velo     MIDI velocity; default=65.\n"#endif /* defined(PROG_HAS_ONSET) && !defined(PROG_HAS_PITCH) */#endif /* defined(PROG_HAS_JACK) && defined(HAVE_JACK) */      "       -q      --quiet            be quiet\n"      "       -v      --verbose          be verbose\n"      "       -h      --help             display this message\n"      );#else /* HAVE_GETOPT_H */  fprintf (stream, "warning: compiled without getopt.h, no argument parsing\n");  fprintf (stream, "usage: %s <filename> \n", prog_name);#endif /* HAVE_GETOPT_H */  exit (exit_code);} intparse_args (int argc, char **argv){#ifdef HAVE_GETOPT_H  const char *options = "hvq"    "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:M:"#endif /* PROG_HAS_ONSET */#ifdef PROG_HAS_PITCH    "p:u:l:"#endif /* PROG_HAS_PITCH */    "T:"#ifdef PROG_HAS_SILENCE    "s:"#endif /* PROG_HAS_SILENCE */#ifdef PROG_HAS_NOTES    "d:"#endif /* PROG_HAS_SILENCE */#ifdef PROG_HAS_OUTPUT    "mf"#endif /* PROG_HAS_OUTPUT */    ;  int next_option;  struct option long_options[] = {    {"help",                  0, NULL, 'h'},    {"verbose",               0, NULL, 'v'},    {"quiet",                 0, NULL, 'q'},    {"input",                 1, NULL, 'i'},    {"samplerate",            1, NULL, 'r'},    {"bufsize",               1, NULL, 'B'},    {"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'},#endif /* PROG_HAS_OUTPUT */#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 */#ifdef PROG_HAS_NOTES    {"release-drop",          1, NULL, 'd'},#endif /* PROG_HAS_NOTES */    {"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 */  // better safe than sorry  if (argc < 1) {    usage (stderr, 1);  }  prog_name = argv[0];#ifdef HAVE_GETOPT_H  do {    next_option = getopt_long (argc, argv, options, long_options, NULL);    switch (next_option) {      case 'h':                /* help */        usage (stdout, 0);        return -1;      case 'v':                /* verbose */        verbose = 1;        break;      case 'q':                /* quiet */        quiet = 1;        break;      case 'j':        usejack = 1;        usedevaudio = 1;        break;      case 'N':        miditap_note = (smpl_t) atoi (optarg);        break;      case 'V':        miditap_velo = (smpl_t) atoi (optarg);        break;      case 'i':        source_uri = optarg;        break;      case 'o':        sink_uri = optarg;        break;      case 'f':                /* force_overwrite flag */        force_overwrite = 1;        break;      case 'r':        samplerate = atoi (optarg);        break;      case 'B':        buffer_size = atoi (optarg);        break;      case 'H':        hop_size = atoi (optarg);        break;      case 'O':                /*onset method */        onset_method = 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 'u':        pitch_unit = 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;      case 'd':                /* release-drop threshold */        release_drop = (smpl_t) atof (optarg);        break;      case 'm':                /* mix_input flag */        mix_input = 1;        break;      case '?':                /* unknown options */        usage (stderr, 1);        break;      case -1:                 /* done with options */        break;      default:                 /*something else unexpected */        fprintf (stderr, "Error parsing option '%c'\n", next_option);        abort ();    }  }  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 ) {    if (argc - optind == 1) {      source_uri = argv[optind];    } else if ( argc - optind > 1 ) {      errmsg ("Error: too many non-option arguments `%s'\n", argv[argc - 1]);      usage ( stderr, 1 );    }  } else if ( argc - optind > 0 ) {    errmsg ("Error: extra non-option argument %s\n", argv[optind]);    usage ( stderr, 1 );  }   // if no source, show a message  if (source_uri == NULL) {#ifdef PROG_HAS_JACK#if HAVE_JACK    verbmsg("No input source given, using jack\n");    usejack = 1;#elif HAVE_DEVAUDIO    verbmsg("No input source given, using devaudio\n");    usedevaudio = 1;#else    errmsg("Error: no arguments given (and no available audio input)\n");    errmsg("       consider recompiling with jack support (--enable-jack)\n");    exit ( 1 );#endif /* HAVE_JACK */#else    errmsg("Error: no arguments given\n");    usage ( stderr, 1 );#endif /* PROG_HAS_JACK */  }   if ((sint_t)hop_size < 1) {    errmsg("Error: got hop_size %d, but can not be < 1\n", hop_size);    usage ( stderr, 1 );  } else if ((sint_t)buffer_size < 2) {    errmsg("Error: got buffer_size %d, but can not be < 2\n", buffer_size);    usage ( stderr, 1 );  } else if ((sint_t)buffer_size < (sint_t)hop_size) {    errmsg("Error: hop size (%d) is larger than win size (%d)\n",        hop_size, buffer_size);    usage ( stderr, 1 );  }   if ((sint_t)samplerate < 0) {    errmsg("Error: got samplerate %d, but can not be < 0\n", samplerate);    usage ( stderr, 1 );  }   return 0;}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t