Changeset 088760e for python/lib/aubio/slicing.py
- Timestamp:
- Oct 31, 2018, 10:26:52 PM (5 years ago)
- Branches:
- feature/constantq
- Children:
- c03d191
- Parents:
- 45c2c5c (diff), 7a54b37 (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/slicing.py
r45c2c5c r088760e 7 7 8 8 def slice_source_at_stamps(source_file, timestamps, timestamps_end=None, 9 output_dir=None, samplerate=0, hopsize=256): 10 """ slice a sound file at given timestamps """ 9 output_dir=None, samplerate=0, hopsize=256, 10 create_first=False): 11 """Slice a sound file at given timestamps. 12 13 This function reads `source_file` and creates slices, new smaller 14 files each starting at `t` in `timestamps`, a list of integer 15 corresponding to time locations in `source_file`, in samples. 16 17 If `timestamps_end` is unspecified, the slices will end at 18 `timestamps_end[n] = timestamps[n+1]-1`, or the end of file. 19 Otherwise, `timestamps_end` should be a list with the same length 20 as `timestamps` containing the locations of the end of each slice. 21 22 If `output_dir` is unspecified, the new slices will be written in 23 the current directory. If `output_dir` is a string, new slices 24 will be written in `output_dir`, after creating the directory if 25 required. 26 27 The default `samplerate` is 0, meaning the original sampling rate 28 of `source_file` will be used. When using a sampling rate 29 different to the one of the original files, `timestamps` and 30 `timestamps_end` should be expressed in the re-sampled signal. 31 32 The `hopsize` parameter simply tells :class:`source` to use this 33 hopsize and does not change the output slices. 34 35 If `create_first` is True and `timestamps` does not start with `0`, the 36 first slice from `0` to `timestamps[0] - 1` will be automatically added. 37 38 Parameters 39 ---------- 40 source_file : str 41 path of the resource to slice 42 timestamps : :obj:`list` of :obj:`int` 43 time stamps at which to slice, in samples 44 timestamps_end : :obj:`list` of :obj:`int` (optional) 45 time stamps at which to end the slices 46 output_dir : str (optional) 47 output directory to write the slices to 48 samplerate : int (optional) 49 samplerate to read the file at 50 hopsize : int (optional) 51 number of samples read from source per iteration 52 create_first : bool (optional) 53 always create the slice at the start of the file 54 55 Examples 56 -------- 57 Create two slices: the first slice starts at the beginning of the 58 input file `loop.wav` and lasts exactly one second, starting at 59 sample `0` and ending at sample `44099`; the second slice starts 60 at sample `44100` and lasts until the end of the input file: 61 62 >>> aubio.slice_source_at_stamps('loop.wav', [0, 44100]) 63 64 Create one slice, from 1 second to 2 seconds: 65 66 >>> aubio.slice_source_at_stamps('loop.wav', [44100], [44100 * 2 - 1]) 67 68 Notes 69 ----- 70 Slices may be overlapping. If `timestamps_end` is `1` element 71 shorter than `timestamps`, the last slice will end at the end of 72 the file. 73 """ 11 74 12 75 if timestamps is None or len(timestamps) == 0: 13 76 raise ValueError("no timestamps given") 14 77 15 if timestamps[0] != 0 :78 if timestamps[0] != 0 and create_first: 16 79 timestamps = [0] + timestamps 17 80 if timestamps_end is not None: … … 19 82 20 83 if timestamps_end is not None: 21 if len(timestamps_end) != len(timestamps): 84 if len(timestamps_end) == len(timestamps) - 1: 85 timestamps_end = timestamps_end + [_max_timestamp] 86 elif len(timestamps_end) != len(timestamps): 22 87 raise ValueError("len(timestamps_end) != len(timestamps)") 23 88 else: … … 49 114 vec, read = _source.do_multi() 50 115 # if the total number of frames read will exceed the next region start 51 iflen(regions) and total_frames + read >= regions[0][0]:116 while len(regions) and total_frames + read >= regions[0][0]: 52 117 #print "getting", regions[0], "at", total_frames 53 118 # get next region … … 76 141 # write remaining samples from current region 77 142 _sink.do_multi(vec[:, start:remaining], remaining - start) 78 #print "closing region", "remaining", remaining143 #print("closing region", "remaining", remaining) 79 144 # close this file 80 145 _sink.close() … … 83 148 _sink.do_multi(vec[:, start:read], read - start) 84 149 total_frames += read 150 # remove old slices 151 slices = list(filter(lambda s: s['end_stamp'] > total_frames, 152 slices)) 85 153 if read < hopsize: 86 154 break
Note: See TracChangeset
for help on using the changeset viewer.