示例#1
0
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 == []
示例#2
0
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
示例#3
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
            ),
        ],
    )
示例#4
0
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=[],
    )
示例#5
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)
                   )
示例#6
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]
示例#7
0
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 [],
    )
示例#8
0
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)
        ],
    )
示例#9
0
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),
        ],
    )
示例#10
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),
    )
示例#11
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)
                   ])
示例#12
0
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"