Changeset 38a965e for python/lib/aubio/cmd.py
- Timestamp:
- Sep 16, 2017, 5:41:35 PM (7 years ago)
- Branches:
- feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master
- Children:
- a729232
- Parents:
- 5e56bbd (diff), c3e98d7 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
python/lib/aubio/cmd.py
r5e56bbd r38a965e 21 21 22 22 subparsers = parser.add_subparsers(title='commands', dest='command', 23 parser_class= AubioArgumentParser, 23 24 metavar="") 24 25 … … 33 34 parser_add_subcommand_melbands(subparsers) 34 35 parser_add_subcommand_quiet(subparsers) 36 parser_add_subcommand_cut(subparsers) 35 37 36 38 return parser … … 47 49 help='estimate time of onsets (beginning of sound event)', 48 50 formatter_class = argparse.ArgumentDefaultsHelpFormatter) 49 parser_add_input(subparser)50 parser_add_buf_hop_size(subparser)51 subparser.add_input() 52 subparser.add_buf_hop_size() 51 53 helpstr = "onset novelty function" 52 54 helpstr += " <default|energy|hfc|complex|phase|specdiff|kl|mkl|specflux>" 53 parser_add_method(subparser,helpstr=helpstr)54 parser_add_threshold(subparser)55 parser_add_silence(subparser)56 parser_add_minioi(subparser)57 parser_add_time_format(subparser)58 parser_add_verbose_help(subparser)55 subparser.add_method(helpstr=helpstr) 56 subparser.add_threshold() 57 subparser.add_silence() 58 subparser.add_minioi() 59 subparser.add_time_format() 60 subparser.add_verbose_help() 59 61 subparser.set_defaults(process=process_onset) 60 62 … … 63 65 subparser = subparsers.add_parser('pitch', 64 66 help='estimate fundamental frequency (monophonic)') 65 parser_add_input(subparser)66 parser_add_buf_hop_size(subparser,buf_size=2048)67 subparser.add_input() 68 subparser.add_buf_hop_size(buf_size=2048) 67 69 helpstr = "pitch detection method <default|yinfft|yin|mcomb|fcomb|schmitt>" 68 parser_add_method(subparser,helpstr=helpstr)69 parser_add_threshold(subparser)70 parser_add_pitch_unit(subparser)71 parser_add_silence(subparser)72 parser_add_time_format(subparser)73 parser_add_verbose_help(subparser)70 subparser.add_method(helpstr=helpstr) 71 subparser.add_threshold() 72 subparser.add_pitch_unit() 73 subparser.add_silence() 74 subparser.add_time_format() 75 subparser.add_verbose_help() 74 76 subparser.set_defaults(process=process_pitch) 75 77 … … 78 80 subparser = subparsers.add_parser('beat', 79 81 help='estimate location of beats') 80 parser_add_input(subparser)81 parser_add_buf_hop_size(subparser,buf_size=1024, hop_size=512)82 parser_add_time_format(subparser)83 parser_add_verbose_help(subparser)82 subparser.add_input() 83 subparser.add_buf_hop_size(buf_size=1024, hop_size=512) 84 subparser.add_time_format() 85 subparser.add_verbose_help() 84 86 subparser.set_defaults(process=process_beat) 85 87 … … 88 90 subparser = subparsers.add_parser('tempo', 89 91 help='estimate overall tempo in bpm') 90 parser_add_input(subparser)91 parser_add_buf_hop_size(subparser,buf_size=1024, hop_size=512)92 parser_add_time_format(subparser)93 parser_add_verbose_help(subparser)92 subparser.add_input() 93 subparser.add_buf_hop_size(buf_size=1024, hop_size=512) 94 subparser.add_time_format() 95 subparser.add_verbose_help() 94 96 subparser.set_defaults(process=process_tempo) 95 97 … … 98 100 subparser = subparsers.add_parser('notes', 99 101 help='estimate midi-like notes (monophonic)') 100 parser_add_input(subparser)101 parser_add_buf_hop_size(subparser)102 parser_add_time_format(subparser)103 parser_add_verbose_help(subparser)102 subparser.add_input() 103 subparser.add_buf_hop_size() 104 subparser.add_time_format() 105 subparser.add_verbose_help() 104 106 subparser.set_defaults(process=process_notes) 105 107 … … 108 110 subparser = subparsers.add_parser('mfcc', 109 111 help='extract Mel-Frequency Cepstrum Coefficients') 110 parser_add_input(subparser)111 parser_add_buf_hop_size(subparser)112 parser_add_time_format(subparser)113 parser_add_verbose_help(subparser)112 subparser.add_input() 113 subparser.add_buf_hop_size() 114 subparser.add_time_format() 115 subparser.add_verbose_help() 114 116 subparser.set_defaults(process=process_mfcc) 115 117 … … 118 120 subparser = subparsers.add_parser('melbands', 119 121 help='extract energies in Mel-frequency bands') 120 parser_add_input(subparser)121 parser_add_buf_hop_size(subparser)122 parser_add_time_format(subparser)123 parser_add_verbose_help(subparser)122 subparser.add_input() 123 subparser.add_buf_hop_size() 124 subparser.add_time_format() 125 subparser.add_verbose_help() 124 126 subparser.set_defaults(process=process_melbands) 125 127 … … 128 130 subparser = subparsers.add_parser('quiet', 129 131 help='extract timestamps of quiet and loud regions') 130 parser_add_input(subparser)131 parser_add_hop_size(subparser)132 parser_add_silence(subparser)133 parser_add_time_format(subparser)134 parser_add_verbose_help(subparser)132 subparser.add_input() 133 subparser.add_hop_size() 134 subparser.add_silence() 135 subparser.add_time_format() 136 subparser.add_verbose_help() 135 137 subparser.set_defaults(process=process_quiet) 136 138 137 def parser_add_input(parser): 138 parser.add_argument("source_uri", default=None, nargs='?', 139 help="input sound file to analyse", metavar = "<source_uri>") 140 parser.add_argument("-i", "--input", dest = "source_uri2", 141 help="input sound file to analyse", metavar = "<source_uri>") 142 parser.add_argument("-r", "--samplerate", 143 metavar = "<freq>", type=int, 144 action="store", dest="samplerate", default=0, 145 help="samplerate at which the file should be represented") 146 147 def parser_add_verbose_help(parser): 148 parser.add_argument("-v","--verbose", 149 action="count", dest="verbose", default=1, 150 help="make lots of noise [default]") 151 parser.add_argument("-q","--quiet", 152 action="store_const", dest="verbose", const=0, 153 help="be quiet") 154 155 def parser_add_buf_hop_size(parser, buf_size=512, hop_size=256): 156 parser_add_buf_size(parser, buf_size=buf_size) 157 parser_add_hop_size(parser, hop_size=hop_size) 158 159 def parser_add_buf_size(parser, buf_size=512): 160 parser.add_argument("-B","--bufsize", 161 action="store", dest="buf_size", default=buf_size, 162 metavar = "<size>", type=int, 163 help="buffer size [default=%d]" % buf_size) 164 165 def parser_add_hop_size(parser, hop_size=256): 166 parser.add_argument("-H","--hopsize", 167 metavar = "<size>", type=int, 168 action="store", dest="hop_size", default=hop_size, 169 help="overlap size [default=%d]" % hop_size) 170 171 def parser_add_method(parser, method='default', helpstr='method'): 172 parser.add_argument("-m","--method", 173 metavar = "<method>", type=str, 174 action="store", dest="method", default=method, 175 help="%s [default=%s]" % (helpstr, method)) 176 177 def parser_add_threshold(parser, default=None): 178 parser.add_argument("-t","--threshold", 179 metavar = "<threshold>", type=float, 180 action="store", dest="threshold", default=default, 181 help="threshold [default=%s]" % default) 182 183 def parser_add_silence(parser): 184 parser.add_argument("-s", "--silence", 185 metavar = "<value>", type=float, 186 action="store", dest="silence", default=-70, 187 help="silence threshold") 188 189 def parser_add_minioi(parser): 190 parser.add_argument("-M", "--minioi", 191 metavar = "<value>", type=str, 192 action="store", dest="minioi", default="12ms", 193 help="minimum Inter-Onset Interval") 194 195 def parser_add_pitch_unit(parser, default="Hz"): 196 help_str = "frequency unit, should be one of Hz, midi, bin, cent" 197 help_str += " [default=%s]" % default 198 parser.add_argument("-u", "--pitch-unit", 199 metavar = "<value>", type=str, 200 action="store", dest="pitch_unit", default=default, 201 help=help_str) 202 203 def parser_add_time_format(parser): 204 helpstr = "select time values output format (samples, ms, seconds)" 205 helpstr += " [default=seconds]" 206 parser.add_argument("-T", "--time-format", 207 metavar='format', 208 dest="time_format", 209 default=None, 210 help=helpstr) 139 def parser_add_subcommand_cut(subparsers): 140 # quiet subcommand 141 subparser = subparsers.add_parser('cut', 142 help='slice at timestamps') 143 subparser.add_input() 144 helpstr = "onset novelty function" 145 helpstr += " <default|energy|hfc|complex|phase|specdiff|kl|mkl|specflux>" 146 subparser.add_method(helpstr=helpstr) 147 subparser.add_buf_hop_size() 148 subparser.add_silence() 149 subparser.add_threshold(default=0.3) 150 subparser.add_minioi() 151 subparser.add_slicer_options() 152 subparser.add_time_format() 153 subparser.add_verbose_help() 154 subparser.set_defaults(process=process_cut) 155 156 class AubioArgumentParser(argparse.ArgumentParser): 157 158 def add_input(self): 159 self.add_argument("source_uri", default=None, nargs='?', 160 help="input sound file to analyse", metavar = "<source_uri>") 161 self.add_argument("-i", "--input", dest = "source_uri2", 162 help="input sound file to analyse", metavar = "<source_uri>") 163 self.add_argument("-r", "--samplerate", 164 metavar = "<freq>", type=int, 165 action="store", dest="samplerate", default=0, 166 help="samplerate at which the file should be represented") 167 168 def add_verbose_help(self): 169 self.add_argument("-v","--verbose", 170 action="count", dest="verbose", default=1, 171 help="make lots of noise [default]") 172 self.add_argument("-q","--quiet", 173 action="store_const", dest="verbose", const=0, 174 help="be quiet") 175 176 def add_buf_hop_size(self, buf_size=512, hop_size=256): 177 self.add_buf_size(buf_size=buf_size) 178 self.add_hop_size(hop_size=hop_size) 179 180 def add_buf_size(self, buf_size=512): 181 self.add_argument("-B","--bufsize", 182 action="store", dest="buf_size", default=buf_size, 183 metavar = "<size>", type=int, 184 help="buffer size [default=%d]" % buf_size) 185 186 def add_hop_size(self, hop_size=256): 187 self.add_argument("-H","--hopsize", 188 metavar = "<size>", type=int, 189 action="store", dest="hop_size", default=hop_size, 190 help="overlap size [default=%d]" % hop_size) 191 192 def add_method(self, method='default', helpstr='method'): 193 self.add_argument("-m","--method", 194 metavar = "<method>", type=str, 195 action="store", dest="method", default=method, 196 help="%s [default=%s]" % (helpstr, method)) 197 198 def add_threshold(self, default=None): 199 self.add_argument("-t","--threshold", 200 metavar = "<threshold>", type=float, 201 action="store", dest="threshold", default=default, 202 help="threshold [default=%s]" % default) 203 204 def add_silence(self): 205 self.add_argument("-s", "--silence", 206 metavar = "<value>", type=float, 207 action="store", dest="silence", default=-70, 208 help="silence threshold") 209 210 def add_minioi(self, default="12ms"): 211 self.add_argument("-M", "--minioi", 212 metavar = "<value>", type=str, 213 action="store", dest="minioi", default=default, 214 help="minimum Inter-Onset Interval [default=%s]" % default) 215 216 def add_pitch_unit(self, default="Hz"): 217 help_str = "frequency unit, should be one of Hz, midi, bin, cent" 218 help_str += " [default=%s]" % default 219 self.add_argument("-u", "--pitch-unit", 220 metavar = "<value>", type=str, 221 action="store", dest="pitch_unit", default=default, 222 help=help_str) 223 224 def add_time_format(self): 225 helpstr = "select time values output format (samples, ms, seconds)" 226 helpstr += " [default=seconds]" 227 self.add_argument("-T", "--time-format", 228 metavar='format', 229 dest="time_format", 230 default=None, 231 help=helpstr) 232 233 def add_slicer_options(self): 234 self.add_argument("-o","--output", type = str, 235 metavar = "<outputdir>", 236 action="store", dest="output_directory", default=None, 237 help="specify path where slices of the original file should be created") 238 self.add_argument("--cut-until-nsamples", type = int, 239 metavar = "<samples>", 240 action = "store", dest = "cut_until_nsamples", default = None, 241 help="how many extra samples should be added at the end of each slice") 242 self.add_argument("--cut-every-nslices", type = int, 243 metavar = "<samples>", 244 action = "store", dest = "cut_every_nslices", default = None, 245 help="how many slices should be groupped together at each cut") 246 self.add_argument("--cut-until-nslices", type = int, 247 metavar = "<slices>", 248 action = "store", dest = "cut_until_nslices", default = None, 249 help="how many extra slices should be added at the end of each slice") 211 250 212 251 # some utilities … … 436 475 fmt_out += self.time2string(frames_read, samplerate) 437 476 sys.stdout.write(fmt_out + '\n') 477 478 class process_cut(process_onset): 479 def __init__(self, args): 480 super(process_cut, self).__init__(args) 481 self.slices = [] 482 self.options = args 483 484 def __call__(self, block): 485 ret = super(process_cut, self).__call__(block) 486 if ret: self.slices.append(self.onset.get_last()) 487 return ret 488 489 def flush(self, frames_read, samplerate): 490 from aubio.cut import _cut_slice 491 _cut_slice(self.options, self.slices) 492 duration = float (frames_read) / float(samplerate) 493 base_info = '%(source_file)s' % {'source_file': self.options.source_uri} 494 base_info += ' (total %(duration).2fs at %(samplerate)dHz)\n' % \ 495 {'duration': duration, 'samplerate': samplerate} 496 info = "created %d slices from " % len(self.slices) 497 info += base_info 498 sys.stderr.write(info) 438 499 439 500 def main():
Note: See TracChangeset
for help on using the changeset viewer.