Changeset f36ecea for python/lib
- Timestamp:
- Jan 12, 2014, 5:54:42 AM (11 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, pitchshift, sampler, timestretch, yinfft+
- Children:
- 4320679
- Parents:
- d945976
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
python/lib/aubio/slicing.py
rd945976 rf36ecea 1 1 from aubio import source, sink 2 2 import os 3 4 max_timestamp = 1e120 3 5 4 6 def slice_source_at_stamps(source_file, timestamps, timestamps_end = None, … … 10 12 raise ValueError ("no timestamps given") 11 13 14 if timestamps[0] != 0: 15 timestamps = [0] + timestamps 16 12 17 if timestamps_end != None and len(timestamps_end) != len(timestamps): 13 18 raise ValueError ("len(timestamps_end) != len(timestamps)") 19 else: 20 timestamps_end = [t - 1 for t in timestamps[1:] ] + [ max_timestamp ] 14 21 15 22 source_base_name, source_ext = os.path.splitext(os.path.basename(source_file)) … … 19 26 source_base_name = os.path.join(output_dir, source_base_name) 20 27 21 def new_sink_name(source_base_name, timestamp): 22 return source_base_name + '_%02.3f' % (timestamp) + '.wav' 28 def new_sink_name(source_base_name, timestamp, samplerate): 29 timestamp_seconds = timestamp / float(samplerate) 30 #print source_base_name + '_%02.3f' % (timestamp_seconds) + '.wav' 31 return source_base_name + '_%02.3f' % (timestamp_seconds) + '.wav' 23 32 24 33 # reopen source file 25 34 s = source(source_file, samplerate, hopsize) 26 35 if samplerate == 0: samplerate = s.get_samplerate() 27 # create first sink at 028 g = sink(new_sink_name(source_base_name, 0.), samplerate)29 36 total_frames = 0 30 37 # get next region 31 next_stamp = int(timestamps.pop(0)) 38 start_stamp = int(timestamps.pop(0)) 39 end_stamp = int(timestamps_end.pop(0)) 40 41 # create first sink 42 new_sink_path = new_sink_name(source_base_name, start_stamp, samplerate) 43 #print "new slice", total_frames, "+", remaining, "=", end_stamp 44 g = sink(new_sink_path, samplerate) 32 45 33 46 while True: 34 47 # get hopsize new samples from source 35 48 vec, read = s() 36 remaining = next_stamp - total_frames 49 # number of samples until end of region 50 remaining = end_stamp - total_frames 37 51 # not enough frames remaining, time to split 38 52 if remaining < read: … … 42 56 # close this file 43 57 del g 58 # get the next region 59 start_stamp = int(timestamps.pop(0)) 60 end_stamp = int(timestamps_end.pop(0)) 44 61 # create a new file for the new region 45 new_sink_path = new_sink_name(source_base_name, next_stamp / float(samplerate))46 #print "new slice", total_frames, "+", remaining, "=", next_stamp62 new_sink_path = new_sink_name(source_base_name, start_stamp, samplerate) 63 #print "new slice", total_frames, "+", remaining, "=", end_stamp 47 64 g = sink(new_sink_path, samplerate) 48 65 # write the remaining samples in the new file 49 66 g(vec[remaining:read], read - remaining) 50 if len(timestamps): 51 next_stamp = int(timestamps.pop(0)) 52 else: 53 next_stamp = 1e120 54 else: 67 elif read > 0: 68 # write all the samples 55 69 g(vec[0:read], read) 56 70 total_frames += read
Note: See TracChangeset
for help on using the changeset viewer.