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. Cut('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. Cut('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 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([ Cut('cut1', start=0, duration=30, channel=0, recording=recording), Cut('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 test_trim_to_supervisions_mixed_cuts(): cut_set = CutSet.from_cuts([ Cut('cut1', start=0, duration=30, channel=0, recording=Recording(id='rec1', sources=[], sampling_rate=16000, num_samples=160000, duration=10.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), ]).append( Cut('cut2', start=0, duration=30, channel=0, recording=Recording(id='rec1', sources=[], sampling_rate=16000, num_samples=160000, duration=10.0), supervisions=[ SupervisionSegment('sup4', 'rec1', start=0, duration=30), ])) ]) assert isinstance(cut_set[0], MixedCut) cuts = cut_set.trim_to_supervisions() assert len(cuts) == 4 # After "trimming", the MixedCut "decayed" into simple, unmixed cuts, as they did not overlap assert all(isinstance(cut, Cut) for cut in cuts) assert all(len(cut.supervisions) == 1 for cut in cuts) assert all(cut.supervisions[0].start == 0 for cut in cuts) cut = cuts[0] # Check that the cuts preserved their start/duration/supervisions after trimming assert cut.start == 1.5 assert cut.duration == 8.5 assert cut.supervisions[0].id == 'sup1' cut = cuts[1] assert cut.start == 10 assert cut.duration == 5 assert cut.supervisions[0].id == 'sup2' cut = cuts[2] assert cut.start == 20 assert cut.duration == 8 assert cut.supervisions[0].id == 'sup3' cut = cuts[3] assert cut.start == 0 assert cut.duration == 30 assert cut.supervisions[0].id == 'sup4'
def libri_cut(): return Cut( 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 libri_cut(): return Cut( channel=0, duration=16.04, features=Features( channels=0, duration=16.04, num_features=40, num_frames=1604, recording_id='recording-1', sampling_rate=16000, start=0.0, storage_path= 'test/fixtures/libri/storage/fc37eb69-43a8-4e6f-a302-646a76606b38.llc', storage_type='lilcom', 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 overlapping_supervisions_cut(): return Cut( 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 cut_with_relative_paths(): return Cut('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), recording=Recording('rec', [AudioSource('file', [0], 'audio.wav')], 8000, 80000, 10.0) )
def cut2(dummy_features): return Cut(id='cut-2', start=180.0, duration=10.0, features=dummy_features, supervisions=[ SupervisionSegment(id='sup-3', recording_id='irrelevant', start=3.0, duration=2.5) ])
def dummy_cut(id: str = 'irrelevant', start: float = 0.0, duration: float = 1.0, supervisions=None): return Cut( id=id, start=start, duration=duration, features=dummy_features(0), supervisions=supervisions if supervisions is not None else [], )
def dummy_cut(unique_id: int, start: float = 0.0, duration: float = 1.0, supervisions=None): return Cut( id=f'dummy-cut-{unique_id:04d}', start=start, duration=duration, channel=0, features=dummy_features(unique_id), supervisions=supervisions if supervisions is not None else [], )
def test_trim_to_supervisions_mixed_cuts(): cut_set = CutSet.from_cuts([ Cut('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), ]).append( Cut('cut2', start=0, duration=30, channel=0, supervisions=[ SupervisionSegment('sup4', 'rec1', start=0, duration=30), ])) ]) cuts = cut_set.trim_to_supervisions() assert len(cuts) == 4 assert all(isinstance(cut, MixedCut) for cut in cuts) assert all(cut.start == 0 for cut in cuts) assert all(len(cut.supervisions) == 1 for cut in cuts) assert all(cut.supervisions[0].start == 0 for cut in cuts) cut = cuts[0] assert cut.duration == 8.5 assert cut.supervisions[0].id == 'sup1' cut = cuts[1] assert cut.duration == 5 assert cut.supervisions[0].id == 'sup2' cut = cuts[2] assert cut.duration == 8 assert cut.supervisions[0].id == 'sup3' cut = cuts[3] assert cut.duration == 30 assert cut.supervisions[0].id == 'sup4'
def cut1(dummy_features): return Cut(id='cut-1', start=0.0, duration=10.0, features=dummy_features, 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) ])