def test_trim_to_unsupervised_segments(): cut_set = CutSet.from_cuts([ # Yields 3 unsupervised cuts - before first supervision, # between sup2 and sup3, and after sup3. MonoCut('cut1', start=0, duration=30, channel=0, supervisions=[ SupervisionSegment('sup1', 'rec1', start=1.5, duration=8.5), SupervisionSegment('sup2', 'rec1', start=10, duration=5), SupervisionSegment('sup3', 'rec1', start=20, duration=8), ]), # Does not yield any "unsupervised" cut. MonoCut('cut2', start=0, duration=30, channel=0, supervisions=[ SupervisionSegment('sup4', 'rec1', start=0, duration=30), ]), ]) unsupervised_cuts = cut_set.trim_to_unsupervised_segments() assert len(unsupervised_cuts) == 3 assert unsupervised_cuts[0].start == 0 assert unsupervised_cuts[0].duration == 1.5 assert unsupervised_cuts[0].supervisions == [] assert unsupervised_cuts[1].start == 15 assert unsupervised_cuts[1].duration == 5 assert unsupervised_cuts[1].supervisions == [] assert unsupervised_cuts[2].start == 28 assert unsupervised_cuts[2].duration == 2 assert unsupervised_cuts[2].supervisions == []
def mixed_overlapping_cut_set(): """ Input mixed cut:: |---------------mixedcut--------------------| |--------rec1 0-30s--------| |-------rec2 15-45s--------| |---sup1--| |-----sup3-----| |sup2| """ cut_set = CutSet.from_cuts([ MonoCut( 'cut1', start=0, duration=30, channel=0, recording=Recording( id='rec1', sources=[], sampling_rate=16000, num_samples=160000, duration=60.0 ), supervisions=[ SupervisionSegment('sup1', 'rec1', start=1.5, duration=10.5), SupervisionSegment('sup2', 'rec1', start=10, duration=6), ] ).mix( MonoCut( 'cut2', start=15, duration=30, channel=0, recording=Recording( id='rec2', sources=[], sampling_rate=16000, num_samples=160000, duration=60.0 ), supervisions=[ SupervisionSegment('sup3', 'rec2', start=8, duration=18), ] ), offset_other_by=15.0 ) ]) assert isinstance(cut_set[0], MixedCut) return cut_set
def overlapping_supervisions_cut(): return MonoCut( id="cut-1", start=0.0, duration=0.5, channel=0, features=Features( recording_id="recording-1", channels=0, start=0, duration=0.5, type="fbank", num_frames=50, num_features=80, frame_shift=0.01, sampling_rate=16000, storage_type="lilcom", storage_path="test/fixtures/dummy_feats/storage/", storage_key="e66b6386-aee5-4a5a-8369-fdde1d2b97c7.llc", ), supervisions=[ SupervisionSegment( id="s1", recording_id="recording-1", start=0.0, duration=0.2 ), SupervisionSegment( id="s2", recording_id="recording-1", start=0.1, duration=0.2 ), SupervisionSegment( id="s3", recording_id="recording-1", start=0.2, duration=0.2 ), SupervisionSegment( id="s4", recording_id="recording-1", start=0.3, duration=0.2 ), ], )
def libri_cut(): return MonoCut( channel=0, duration=16.04, features=Features( channels=0, duration=16.04, num_features=40, num_frames=1604, frame_shift=0.01, recording_id="recording-1", sampling_rate=16000, start=0.0, storage_path="test/fixtures/libri/storage", storage_key="30c2440c-93cb-4e83-b382-f2a59b3859b4.llc", storage_type="lilcom_files", type="fbank", ), recording=Recording( id="recording-1", sources=[ AudioSource( type="file", channels=[0], source="test/fixtures/libri/libri-1088-134315-0000.wav", ) ], sampling_rate=16000, num_samples=256640, duration=1604, ), id="849e13d8-61a2-4d09-a542-dac1aee1b544", start=0.0, supervisions=[], )
def cut_with_relative_paths(): return MonoCut('cut', 0, 10, 0, features=Features(type='fbank', num_frames=1000, num_features=40, sampling_rate=8000, storage_type='lilcom_files', storage_path='storage_dir', storage_key='feats.llc', start=0, duration=10, frame_shift=0.01), recording=Recording('rec', [AudioSource('file', [0], 'audio.wav')], 8000, 80000, 10.0) )
def test_mix_same_recording_channels(): recording = Recording('rec', sampling_rate=8000, num_samples=30 * 8000, duration=30, sources=[ AudioSource('file', channels=[0], source='irrelevant1.wav'), AudioSource('file', channels=[1], source='irrelevant2.wav') ]) cut_set = CutSet.from_cuts([ MonoCut('cut1', start=0, duration=30, channel=0, recording=recording), MonoCut('cut2', start=0, duration=30, channel=1, recording=recording) ]) mixed = cut_set.mix_same_recording_channels() assert len(mixed) == 1 cut = mixed[0] assert isinstance(cut, MixedCut) assert len(cut.tracks) == 2 assert cut.tracks[0].cut == cut_set[0] assert cut.tracks[1].cut == cut_set[1]
def dummy_cut(unique_id: int, start: float = 0.0, duration: float = 1.0, supervisions=None): return MonoCut( id=f'dummy-cut-{unique_id:04d}', start=start, duration=duration, channel=0, recording=dummy_recording(unique_id), features=dummy_features(unique_id), supervisions=supervisions if supervisions is not None else [], )
def cut2(dummy_features, dummy_recording): return MonoCut( id="cut-2", start=180.0, duration=10.0, channel=0, features=dummy_features, recording=dummy_recording, supervisions=[ SupervisionSegment(id="sup-3", recording_id="irrelevant", start=3.0, duration=2.5) ], )
def cut1(dummy_features, dummy_recording): return MonoCut( id="cut-1", start=0.0, duration=10.0, channel=0, features=dummy_features, recording=dummy_recording, supervisions=[ SupervisionSegment(id="sup-1", recording_id="irrelevant", start=0.5, duration=6.0), SupervisionSegment(id="sup-2", recording_id="irrelevant", start=7.0, duration=2.0), ], )
def cut_with_relative_paths(): return MonoCut( "cut", 0, 10, 0, features=Features( type="fbank", num_frames=1000, num_features=40, sampling_rate=8000, storage_type="lilcom_files", storage_path="storage_dir", storage_key="feats.llc", start=0, duration=10, frame_shift=0.01, ), recording=Recording("rec", [AudioSource("file", [0], "audio.wav")], 8000, 80000, 10.0), )
def overlapping_supervisions_cut(): return MonoCut(id='cut-1', start=0.0, duration=0.5, channel=0, features=Features( recording_id='recording-1', channels=0, start=0, duration=0.5, type='fbank', num_frames=50, num_features=80, frame_shift=0.01, sampling_rate=16000, storage_type='lilcom', storage_path='test/fixtures/dummy_feats/storage/', storage_key='e66b6386-aee5-4a5a-8369-fdde1d2b97c7.llc'), supervisions=[ SupervisionSegment(id='s1', recording_id='recording-1', start=0.0, duration=0.2), SupervisionSegment(id='s2', recording_id='recording-1', start=0.1, duration=0.2), SupervisionSegment(id='s3', recording_id='recording-1', start=0.2, duration=0.2), SupervisionSegment(id='s4', recording_id='recording-1', start=0.3, duration=0.2) ])
def test_trim_to_supervisions_simple_cuts(keep_overlapping, num_jobs): cut_set = CutSet.from_cuts([ MonoCut( "cut1", start=0, duration=30, channel=0, supervisions=[ SupervisionSegment("sup1", "rec1", start=1.5, duration=10.5), SupervisionSegment("sup2", "rec1", start=10, duration=5), SupervisionSegment("sup3", "rec1", start=20, duration=8), ], recording=dummy_recording(1, duration=30), ), MonoCut( "cut2", start=0, duration=30, channel=0, supervisions=[ SupervisionSegment("sup4", "rec1", start=0, duration=30), ], recording=dummy_recording(2, duration=30), ), ]) cuts = cut_set.trim_to_supervisions(keep_overlapping=keep_overlapping, num_jobs=num_jobs) assert len(cuts) == 4 # Note: expected results diverge here depending on the value of keep_overlapping flag cut = cuts[0] assert cut.start == 1.5 assert cut.duration == 10.5 if keep_overlapping: assert len(cut.supervisions) == 2 sup = cut.supervisions[0] assert sup.id == "sup1" assert sup.start == 0 assert sup.duration == 10.5 sup = cut.supervisions[1] assert sup.id == "sup2" assert sup.start == 8.5 assert sup.duration == 5 else: assert len(cut.supervisions) == 1 sup = cut.supervisions[0] assert sup.id == "sup1" assert sup.start == 0 assert sup.duration == 10.5 # Note: expected results diverge here depending on the value of keep_overlapping flag cut = cuts[1] assert cut.start == 10 assert cut.duration == 5 if keep_overlapping: assert len(cut.supervisions) == 2 sup = cut.supervisions[0] assert sup.id == "sup1" assert sup.start == -8.5 assert sup.duration == 10.5 sup = cut.supervisions[1] assert sup.id == "sup2" assert sup.start == 0 assert sup.duration == 5 else: assert len(cut.supervisions) == 1 sup = cut.supervisions[0] assert sup.id == "sup2" assert sup.start == 0 assert sup.duration == 5 # Note: both test cases have same results cut = cuts[2] assert len(cut.supervisions) == 1 assert cut.start == 20 assert cut.duration == 8 assert cut.supervisions[0].id == "sup3" # Note: both test cases have same results cut = cuts[3] assert len(cut.supervisions) == 1 assert cut.start == 0 assert cut.duration == 30 assert cut.supervisions[0].id == "sup4"