Changeset 38a965e for python/lib/aubio/cut.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/cut.py
r5e56bbd r38a965e 6 6 7 7 import sys 8 import argparse 8 from aubio.cmd import AubioArgumentParser 9 9 10 def parse_args(): 11 usage = "usage: %s [options] -i soundfile" % sys.argv[0] 12 usage += "\n help: %s -h" % sys.argv[0] 13 parser = argparse.ArgumentParser() 14 parser.add_argument("source_file", default=None, nargs='?', 15 help="input sound file to analyse", metavar = "<source_file>") 16 parser.add_argument("-i", "--input", action = "store", dest = "source_file2", 17 help="input sound file to analyse", metavar = "<source_file>") 10 def aubio_cut_parser(): 11 parser = AubioArgumentParser() 12 parser.add_input() 18 13 parser.add_argument("-O","--onset-method", 19 14 action="store", dest="onset_method", default='default', … … 24 19 parser.add_argument("-b","--beat", 25 20 action="store_true", dest="beat", default=False, 26 help=" usebeat locations")21 help="slice at beat locations") 27 22 """ 28 23 parser.add_argument("-S","--silencecut", … … 35 30 """ 36 31 # algorithm parameters 37 parser.add_argument("-r", "--samplerate", 38 metavar = "<freq>", type=int, 39 action="store", dest="samplerate", default=0, 40 help="samplerate at which the file should be represented") 41 parser.add_argument("-B","--bufsize", 42 action="store", dest="bufsize", default=512, 43 metavar = "<size>", type=int, 44 help="buffer size [default=512]") 45 parser.add_argument("-H","--hopsize", 46 metavar = "<size>", type=int, 47 action="store", dest="hopsize", default=256, 48 help="overlap size [default=256]") 49 parser.add_argument("-t","--onset-threshold", 50 metavar = "<value>", type=float, 32 parser.add_buf_hop_size() 33 parser.add_argument("-t","--threshold", "--onset-threshold", 34 metavar = "<threshold>", type=float, 51 35 action="store", dest="threshold", default=0.3, 52 36 help="onset peak picking threshold [default=0.3]") 53 37 parser.add_argument("-c","--cut", 54 38 action="store_true", dest="cut", default=False, 55 help="cut input sound file at detected labels \ 56 best used with option -L") 57 58 # minioi 59 parser.add_argument("-M","--minioi", 60 metavar = "<value>", type=str, 61 action="store", dest="minioi", default="12ms", 62 help="minimum inter onset interval [default=12ms]") 39 help="cut input sound file at detected labels") 40 parser.add_minioi() 63 41 64 42 """ … … 82 60 action="store", dest="zerothres", default=0.008, 83 61 help="zero-crossing threshold for slicing [default=0.00008]") 84 """85 62 # plotting functions 86 """87 63 parser.add_argument("-p","--plot", 88 64 action="store_true", dest="plot", default=False, … … 110 86 help="add spectrogram to the plot") 111 87 """ 112 parser.add_argument("-o","--output", type = str, 113 metavar = "<outputdir>", 114 action="store", dest="output_directory", default=None, 115 help="specify path where slices of the original file should be created") 116 parser.add_argument("--cut-until-nsamples", type = int, 117 metavar = "<samples>", 118 action = "store", dest = "cut_until_nsamples", default = None, 119 help="how many extra samples should be added at the end of each slice") 120 parser.add_argument("--cut-every-nslices", type = int, 121 metavar = "<samples>", 122 action = "store", dest = "cut_every_nslices", default = None, 123 help="how many slices should be groupped together at each cut") 124 parser.add_argument("--cut-until-nslices", type = int, 125 metavar = "<slices>", 126 action = "store", dest = "cut_until_nslices", default = None, 127 help="how many extra slices should be added at the end of each slice") 88 parser.add_slicer_options() 89 parser.add_verbose_help() 90 return parser 128 91 129 parser.add_argument("-v","--verbose",130 action="store_true", dest="verbose", default=True,131 help="make lots of noise [default]")132 parser.add_argument("-q","--quiet",133 action="store_false", dest="verbose", default=True,134 help="be quiet")135 args = parser.parse_args()136 if not args.source_file and not args.source_file2:137 sys.stderr.write("Error: no file name given\n")138 parser.print_help()139 sys.exit(1)140 elif args.source_file2 is not None:141 args.source_file = args.source_file2142 return args143 92 144 def main(): 145 options = parse_args() 93 def _cut_analyze(options): 94 hopsize = options.hop_size 95 bufsize = options.buf_size 96 samplerate = options.samplerate 97 source_uri = options.source_uri 146 98 147 source_file = options.source_file 148 hopsize = options.hopsize 149 bufsize = options.bufsize 150 samplerate = options.samplerate 151 source_file = options.source_file 152 99 # analyze pass 153 100 from aubio import onset, tempo, source 154 101 155 s = source(source_file, samplerate, hopsize) 156 if samplerate == 0: samplerate = s.get_samplerate() 102 s = source(source_uri, samplerate, hopsize) 103 if samplerate == 0: 104 samplerate = s.get_samplerate() 105 options.samplerate = samplerate 157 106 158 107 if options.beat: … … 171 120 timestamps = [] 172 121 total_frames = 0 173 # analyze pass174 122 while True: 175 123 samples, read = s() … … 180 128 if read < hopsize: break 181 129 del s 182 # print some info 130 return timestamps, total_frames 131 132 def _cut_slice(options, timestamps): 133 # cutting pass 183 134 nstamps = len(timestamps) 184 duration = float (total_frames) / float(samplerate) 185 info = 'found %(nstamps)d timestamps in %(source_file)s' % locals() 186 info += ' (total %(duration).2fs at %(samplerate)dHz)\n' % locals() 187 sys.stderr.write(info) 188 189 # cutting pass 190 if options.cut and nstamps > 0: 135 if nstamps > 0: 191 136 # generate output files 192 137 from aubio.slicing import slice_source_at_stamps … … 203 148 timestamps_end = [t for t in timestamps[1 + options.cut_until_nslices:]] 204 149 timestamps_end += [ 1e120 ] * (options.cut_until_nslices + 1) 205 slice_source_at_stamps(source_file, timestamps, timestamps_end = timestamps_end, 150 slice_source_at_stamps(options.source_uri, 151 timestamps, timestamps_end = timestamps_end, 206 152 output_dir = options.output_directory, 207 samplerate = samplerate)153 samplerate = options.samplerate) 208 154 209 # print some info 210 duration = float (total_frames) / float(samplerate) 211 info = 'created %(nstamps)d slices from %(source_file)s' % locals() 212 info += ' (total %(duration).2fs at %(samplerate)dHz)\n' % locals() 155 def main(): 156 parser = aubio_cut_parser() 157 options = parser.parse_args() 158 if not options.source_uri and not options.source_uri2: 159 sys.stderr.write("Error: no file name given\n") 160 parser.print_help() 161 sys.exit(1) 162 elif options.source_uri2 is not None: 163 options.source_uri = options.source_uri2 164 165 # analysis 166 timestamps, total_frames = _cut_analyze(options) 167 168 # print some info 169 duration = float (total_frames) / float(options.samplerate) 170 base_info = '%(source_uri)s' % {'source_uri': options.source_uri} 171 base_info += ' (total %(duration).2fs at %(samplerate)dHz)\n' % \ 172 {'duration': duration, 'samplerate': options.samplerate} 173 174 info = "found %d timestamps in " % len(timestamps) 175 info += base_info 176 sys.stderr.write(info) 177 178 if options.cut: 179 _cut_slice(options, timestamps) 180 info = "created %d slices from " % len(timestamps) 181 info += base_info 213 182 sys.stderr.write(info)
Note: See TracChangeset
for help on using the changeset viewer.