From c95062be03d183ed7576fba29218eeae5e179404 Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Sat, 16 Sep 2017 15:45:18 +0200 Subject: [PATCH] python/lib/aubio/cmd.py: use custom parser class --- python/lib/aubio/cmd.py | 233 ++++++++++++++++++++++++------------------------ 1 file changed, 118 insertions(+), 115 deletions(-) diff --git a/python/lib/aubio/cmd.py b/python/lib/aubio/cmd.py index a74d2e0d..f98d6b03 100644 --- a/python/lib/aubio/cmd.py +++ b/python/lib/aubio/cmd.py @@ -20,6 +20,7 @@ def aubio_parser(): action="store_true", dest="show_version") subparsers = parser.add_subparsers(title='commands', dest='command', + parser_class= AubioArgumentParser, metavar="") parser_add_subcommand_help(subparsers) @@ -46,168 +47,170 @@ def parser_add_subcommand_onset(subparsers): subparser = subparsers.add_parser('onset', help='estimate time of onsets (beginning of sound event)', formatter_class = argparse.ArgumentDefaultsHelpFormatter) - parser_add_input(subparser) - parser_add_buf_hop_size(subparser) + subparser.add_input() + subparser.add_buf_hop_size() helpstr = "onset novelty function" helpstr += " " - parser_add_method(subparser, helpstr=helpstr) - parser_add_threshold(subparser) - parser_add_silence(subparser) - parser_add_minioi(subparser) - parser_add_time_format(subparser) - parser_add_verbose_help(subparser) + subparser.add_method(helpstr=helpstr) + subparser.add_threshold() + subparser.add_silence() + subparser.add_minioi() + subparser.add_time_format() + subparser.add_verbose_help() subparser.set_defaults(process=process_onset) def parser_add_subcommand_pitch(subparsers): # pitch subcommand subparser = subparsers.add_parser('pitch', help='estimate fundamental frequency (monophonic)') - parser_add_input(subparser) - parser_add_buf_hop_size(subparser, buf_size=2048) + subparser.add_input() + subparser.add_buf_hop_size(buf_size=2048) helpstr = "pitch detection method " - parser_add_method(subparser, helpstr=helpstr) - parser_add_threshold(subparser) - parser_add_pitch_unit(subparser) - parser_add_silence(subparser) - parser_add_time_format(subparser) - parser_add_verbose_help(subparser) + subparser.add_method(helpstr=helpstr) + subparser.add_threshold() + subparser.add_pitch_unit() + subparser.add_silence() + subparser.add_time_format() + subparser.add_verbose_help() subparser.set_defaults(process=process_pitch) def parser_add_subcommand_beat(subparsers): # beat subcommand subparser = subparsers.add_parser('beat', help='estimate location of beats') - parser_add_input(subparser) - parser_add_buf_hop_size(subparser, buf_size=1024, hop_size=512) - parser_add_time_format(subparser) - parser_add_verbose_help(subparser) + subparser.add_input() + subparser.add_buf_hop_size(buf_size=1024, hop_size=512) + subparser.add_time_format() + subparser.add_verbose_help() subparser.set_defaults(process=process_beat) def parser_add_subcommand_tempo(subparsers): # tempo subcommand subparser = subparsers.add_parser('tempo', help='estimate overall tempo in bpm') - parser_add_input(subparser) - parser_add_buf_hop_size(subparser, buf_size=1024, hop_size=512) - parser_add_time_format(subparser) - parser_add_verbose_help(subparser) + subparser.add_input() + subparser.add_buf_hop_size(buf_size=1024, hop_size=512) + subparser.add_time_format() + subparser.add_verbose_help() subparser.set_defaults(process=process_tempo) def parser_add_subcommand_notes(subparsers): # notes subcommand subparser = subparsers.add_parser('notes', help='estimate midi-like notes (monophonic)') - parser_add_input(subparser) - parser_add_buf_hop_size(subparser) - parser_add_time_format(subparser) - parser_add_verbose_help(subparser) + subparser.add_input() + subparser.add_buf_hop_size() + subparser.add_time_format() + subparser.add_verbose_help() subparser.set_defaults(process=process_notes) def parser_add_subcommand_mfcc(subparsers): # mfcc subcommand subparser = subparsers.add_parser('mfcc', help='extract Mel-Frequency Cepstrum Coefficients') - parser_add_input(subparser) - parser_add_buf_hop_size(subparser) - parser_add_time_format(subparser) - parser_add_verbose_help(subparser) + subparser.add_input() + subparser.add_buf_hop_size() + subparser.add_time_format() + subparser.add_verbose_help() subparser.set_defaults(process=process_mfcc) def parser_add_subcommand_melbands(subparsers): # melbands subcommand subparser = subparsers.add_parser('melbands', help='extract energies in Mel-frequency bands') - parser_add_input(subparser) - parser_add_buf_hop_size(subparser) - parser_add_time_format(subparser) - parser_add_verbose_help(subparser) + subparser.add_input() + subparser.add_buf_hop_size() + subparser.add_time_format() + subparser.add_verbose_help() subparser.set_defaults(process=process_melbands) def parser_add_subcommand_quiet(subparsers): # quiet subcommand subparser = subparsers.add_parser('quiet', help='extract timestamps of quiet and loud regions') - parser_add_input(subparser) - parser_add_hop_size(subparser) - parser_add_silence(subparser) - parser_add_time_format(subparser) - parser_add_verbose_help(subparser) + subparser.add_input() + subparser.add_hop_size() + subparser.add_silence() + subparser.add_time_format() + subparser.add_verbose_help() subparser.set_defaults(process=process_quiet) -def parser_add_input(parser): - parser.add_argument("source_uri", default=None, nargs='?', - help="input sound file to analyse", metavar = "") - parser.add_argument("-i", "--input", dest = "source_uri2", - help="input sound file to analyse", metavar = "") - parser.add_argument("-r", "--samplerate", - metavar = "", type=int, - action="store", dest="samplerate", default=0, - help="samplerate at which the file should be represented") - -def parser_add_verbose_help(parser): - parser.add_argument("-v","--verbose", - action="count", dest="verbose", default=1, - help="make lots of noise [default]") - parser.add_argument("-q","--quiet", - action="store_const", dest="verbose", const=0, - help="be quiet") - -def parser_add_buf_hop_size(parser, buf_size=512, hop_size=256): - parser_add_buf_size(parser, buf_size=buf_size) - parser_add_hop_size(parser, hop_size=hop_size) - -def parser_add_buf_size(parser, buf_size=512): - parser.add_argument("-B","--bufsize", - action="store", dest="buf_size", default=buf_size, - metavar = "", type=int, - help="buffer size [default=%d]" % buf_size) - -def parser_add_hop_size(parser, hop_size=256): - parser.add_argument("-H","--hopsize", - metavar = "", type=int, - action="store", dest="hop_size", default=hop_size, - help="overlap size [default=%d]" % hop_size) - -def parser_add_method(parser, method='default', helpstr='method'): - parser.add_argument("-m","--method", - metavar = "", type=str, - action="store", dest="method", default=method, - help="%s [default=%s]" % (helpstr, method)) - -def parser_add_threshold(parser, default=None): - parser.add_argument("-t","--threshold", - metavar = "", type=float, - action="store", dest="threshold", default=default, - help="threshold [default=%s]" % default) - -def parser_add_silence(parser): - parser.add_argument("-s", "--silence", - metavar = "", type=float, - action="store", dest="silence", default=-70, - help="silence threshold") - -def parser_add_minioi(parser): - parser.add_argument("-M", "--minioi", - metavar = "", type=str, - action="store", dest="minioi", default="12ms", - help="minimum Inter-Onset Interval") - -def parser_add_pitch_unit(parser, default="Hz"): - help_str = "frequency unit, should be one of Hz, midi, bin, cent" - help_str += " [default=%s]" % default - parser.add_argument("-u", "--pitch-unit", - metavar = "", type=str, - action="store", dest="pitch_unit", default=default, - help=help_str) - -def parser_add_time_format(parser): - helpstr = "select time values output format (samples, ms, seconds)" - helpstr += " [default=seconds]" - parser.add_argument("-T", "--time-format", - metavar='format', - dest="time_format", - default=None, - help=helpstr) +class AubioArgumentParser(argparse.ArgumentParser): + + def add_input(self): + self.add_argument("source_uri", default=None, nargs='?', + help="input sound file to analyse", metavar = "") + self.add_argument("-i", "--input", dest = "source_uri2", + help="input sound file to analyse", metavar = "") + self.add_argument("-r", "--samplerate", + metavar = "", type=int, + action="store", dest="samplerate", default=0, + help="samplerate at which the file should be represented") + + def add_verbose_help(self): + self.add_argument("-v","--verbose", + action="count", dest="verbose", default=1, + help="make lots of noise [default]") + self.add_argument("-q","--quiet", + action="store_const", dest="verbose", const=0, + help="be quiet") + + def add_buf_hop_size(self, buf_size=512, hop_size=256): + self.add_buf_size(buf_size=buf_size) + self.add_hop_size(hop_size=hop_size) + + def add_buf_size(self, buf_size=512): + self.add_argument("-B","--bufsize", + action="store", dest="buf_size", default=buf_size, + metavar = "", type=int, + help="buffer size [default=%d]" % buf_size) + + def add_hop_size(self, hop_size=256): + self.add_argument("-H","--hopsize", + metavar = "", type=int, + action="store", dest="hop_size", default=hop_size, + help="overlap size [default=%d]" % hop_size) + + def add_method(self, method='default', helpstr='method'): + self.add_argument("-m","--method", + metavar = "", type=str, + action="store", dest="method", default=method, + help="%s [default=%s]" % (helpstr, method)) + + def add_threshold(self, default=None): + self.add_argument("-t","--threshold", + metavar = "", type=float, + action="store", dest="threshold", default=default, + help="threshold [default=%s]" % default) + + def add_silence(self): + self.add_argument("-s", "--silence", + metavar = "", type=float, + action="store", dest="silence", default=-70, + help="silence threshold") + + def add_minioi(self, default="12ms"): + self.add_argument("-M", "--minioi", + metavar = "", type=str, + action="store", dest="minioi", default=default, + help="minimum Inter-Onset Interval [default=%s]" % default) + + def add_pitch_unit(self, default="Hz"): + help_str = "frequency unit, should be one of Hz, midi, bin, cent" + help_str += " [default=%s]" % default + self.add_argument("-u", "--pitch-unit", + metavar = "", type=str, + action="store", dest="pitch_unit", default=default, + help=help_str) + + def add_time_format(self): + helpstr = "select time values output format (samples, ms, seconds)" + helpstr += " [default=seconds]" + self.add_argument("-T", "--time-format", + metavar='format', + dest="time_format", + default=None, + help=helpstr) # some utilities -- 2.11.0