Changes in python/lib/aubio/cmd.py [357f81e:dc74f69]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
python/lib/aubio/cmd.py
r357f81e rdc74f69 12 12 import sys 13 13 import argparse 14 import warnings 14 15 import aubio 15 16 … … 169 170 170 171 def add_verbose_help(self): 171 self.add_argument("-v", "--verbose",172 self.add_argument("-v", "--verbose", 172 173 action="count", dest="verbose", default=1, 173 174 help="make lots of noise [default]") 174 self.add_argument("-q", "--quiet",175 self.add_argument("-q", "--quiet", 175 176 action="store_const", dest="verbose", const=0, 176 177 help="be quiet") … … 181 182 182 183 def add_buf_size(self, buf_size=512): 183 self.add_argument("-B", "--bufsize",184 self.add_argument("-B", "--bufsize", 184 185 action="store", dest="buf_size", default=buf_size, 185 186 metavar = "<size>", type=int, … … 187 188 188 189 def add_hop_size(self, hop_size=256): 189 self.add_argument("-H", "--hopsize",190 self.add_argument("-H", "--hopsize", 190 191 metavar = "<size>", type=int, 191 192 action="store", dest="hop_size", default=hop_size, … … 193 194 194 195 def add_method(self, method='default', helpstr='method'): 195 self.add_argument("-m", "--method",196 self.add_argument("-m", "--method", 196 197 metavar = "<method>", type=str, 197 198 action="store", dest="method", default=method, … … 199 200 200 201 def add_threshold(self, default=None): 201 self.add_argument("-t", "--threshold",202 self.add_argument("-t", "--threshold", 202 203 metavar = "<threshold>", type=float, 203 204 action="store", dest="threshold", default=default, … … 240 241 241 242 def add_slicer_options(self): 242 self.add_argument("-o", "--output", type = str,243 self.add_argument("-o", "--output", type = str, 243 244 metavar = "<outputdir>", 244 245 action="store", dest="output_directory", default=None, 245 help="specify path where slices of the original file should be created") 246 help="specify path where slices of the original file should" 247 " be created") 246 248 self.add_argument("--cut-until-nsamples", type = int, 247 249 metavar = "<samples>", 248 250 action = "store", dest = "cut_until_nsamples", default = None, 249 help="how many extra samples should be added at the end of each slice") 251 help="how many extra samples should be added at the end of" 252 " each slice") 250 253 self.add_argument("--cut-every-nslices", type = int, 251 254 metavar = "<samples>", … … 255 258 metavar = "<slices>", 256 259 action = "store", dest = "cut_until_nslices", default = None, 257 help="how many extra slices should be added at the end of each slice") 260 help="how many extra slices should be added at the end of" 261 " each slice") 262 self.add_argument("--create-first", 263 action = "store_true", dest = "create_first", default = False, 264 help="always include first slice") 258 265 259 266 # some utilities … … 286 293 if args.verbose > 2 and hasattr(self, 'options'): 287 294 name = type(self).__name__.split('_')[1] 288 optstr = ' '.join(['running', name, 'with options', repr(self.options), '\n']) 295 optstr = ' '.join(['running', name, 'with options', 296 repr(self.options), '\n']) 289 297 sys.stderr.write(optstr) 290 298 def flush(self, frames_read, samplerate): … … 294 302 def parse_options(self, args, valid_opts): 295 303 # get any valid options found in a dictionnary of arguments 296 options = {k :v for k,v in vars(args).items() if k in valid_opts}304 options = {k: v for k, v in vars(args).items() if k in valid_opts} 297 305 self.options = options 298 306 … … 375 383 outstr = "unknown bpm" 376 384 else: 377 bpms = 60. / np.diff(self.beat_locations)385 bpms = 60. / np.diff(self.beat_locations) 378 386 median_bpm = np.mean(bpms) 379 387 if len(self.beat_locations) < 10: … … 396 404 return self.notes(block) 397 405 def repr_res(self, res, frames_read, samplerate): 398 if res[2] != 0: # note off406 if res[2] != 0: # note off 399 407 fmt_out = self.time2string(frames_read, samplerate) 400 408 sys.stdout.write(fmt_out + '\n') 401 if res[0] != 0: # note on409 if res[0] != 0: # note on 402 410 lastmidi = res[0] 403 411 fmt_out = "%f\t" % lastmidi 404 412 fmt_out += self.time2string(frames_read, samplerate) 405 sys.stdout.write(fmt_out) # + '\t')413 sys.stdout.write(fmt_out) # + '\t') 406 414 def flush(self, frames_read, samplerate): 407 415 eof = self.time2string(frames_read, samplerate) … … 470 478 if self.wassilence != 1: 471 479 self.wassilence = 1 472 return 2 # newly found silence473 return 1 # silence again480 return 2 # newly found silence 481 return 1 # silence again 474 482 else: 475 483 if self.wassilence != 0: 476 484 self.wassilence = 0 477 return -1 # newly found noise478 return 0 # noise again485 return -1 # newly found noise 486 return 0 # noise again 479 487 480 488 def repr_res(self, res, frames_read, samplerate): … … 496 504 def __call__(self, block): 497 505 ret = super(process_cut, self).__call__(block) 498 if ret: self.slices.append(self.onset.get_last()) 506 if ret: 507 self.slices.append(self.onset.get_last()) 499 508 return ret 500 509 501 510 def flush(self, frames_read, samplerate): 502 from aubio.cut import _cut_slice503 511 _cut_slice(self.options, self.slices) 504 duration = float (frames_read) / float(samplerate) 505 base_info = '%(source_file)s' % {'source_file': self.options.source_uri} 512 duration = float(frames_read) / float(samplerate) 513 base_info = '%(source_file)s' % \ 514 {'source_file': self.options.source_uri} 506 515 base_info += ' (total %(duration).2fs at %(samplerate)dHz)\n' % \ 507 {'duration': duration, 'samplerate': samplerate}516 {'duration': duration, 'samplerate': samplerate} 508 517 info = "created %d slices from " % len(self.slices) 509 518 info += base_info 510 519 sys.stderr.write(info) 511 520 521 def _cut_slice(options, timestamps): 522 # cutting pass 523 nstamps = len(timestamps) 524 if nstamps > 0: 525 # generate output files 526 timestamps_end = None 527 if options.cut_every_nslices: 528 timestamps = timestamps[::options.cut_every_nslices] 529 nstamps = len(timestamps) 530 if options.cut_until_nslices and options.cut_until_nsamples: 531 msg = "using cut_until_nslices, but cut_until_nsamples is set" 532 warnings.warn(msg) 533 if options.cut_until_nsamples: 534 lag = options.cut_until_nsamples 535 timestamps_end = [t + lag for t in timestamps[1:]] 536 timestamps_end += [1e120] 537 if options.cut_until_nslices: 538 slice_lag = options.cut_until_nslices 539 timestamps_end = [t for t in timestamps[1 + slice_lag:]] 540 timestamps_end += [1e120] * (options.cut_until_nslices + 1) 541 aubio.slice_source_at_stamps(options.source_uri, 542 timestamps, timestamps_end = timestamps_end, 543 output_dir = options.output_directory, 544 samplerate = options.samplerate, 545 create_first = options.create_first) 546 512 547 def main(): 513 548 parser = aubio_parser() 514 args = parser.parse_args() 549 if sys.version_info[0] != 3: 550 # on py2, create a dummy ArgumentParser to workaround the 551 # optional subcommand issue. See https://bugs.python.org/issue9253 552 # This ensures that: 553 # - version string is shown when only '-V' is passed 554 # - help is printed if '-V' is passed with any other argument 555 # - any other argument get forwarded to the real parser 556 parser_root = argparse.ArgumentParser(add_help=False) 557 parser_root.add_argument('-V', '--version', help="show version", 558 action="store_true", dest="show_version") 559 args, extras = parser_root.parse_known_args() 560 if not args.show_version: # no -V, forward to parser 561 args = parser.parse_args(extras, namespace=args) 562 elif len(extras) != 0: # -V with other arguments, print help 563 parser.print_help() 564 sys.exit(1) 565 else: # in py3, we can simply use parser directly 566 args = parser.parse_args() 515 567 if 'show_version' in args and args.show_version: 516 568 sys.stdout.write('aubio version ' + aubio.version + '\n') … … 518 570 elif 'verbose' in args and args.verbose > 3: 519 571 sys.stderr.write('aubio version ' + aubio.version + '\n') 520 if 'command' not in args or args.command is None or args.command in ['help']: 572 if 'command' not in args or args.command is None \ 573 or args.command in ['help']: 521 574 # no command given, print help and return 1 522 575 parser.print_help() … … 552 605 frames_read += read 553 606 # exit loop at end of file 554 if read < a_source.hop_size: break 607 if read < a_source.hop_size: 608 break 555 609 # flush the processor if needed 556 610 processor.flush(frames_read, a_source.samplerate) … … 560 614 fmt_string += " from {:s} at {:d}Hz\n" 561 615 sys.stderr.write(fmt_string.format( 562 frames_read /float(a_source.samplerate),616 frames_read / float(a_source.samplerate), 563 617 frames_read, 564 618 frames_read // a_source.hop_size + 1,
Note: See TracChangeset
for help on using the changeset viewer.