def test_cut_load_custom_recording_truncate(): sampling_rate = 16000 duration = 52.4 audio = np.random.randn(1, compute_num_samples(duration, sampling_rate)).astype( np.float32 ) audio /= np.abs(audio).max() # normalize to [-1, 1] with NamedTemporaryFile(suffix=".wav") as f: torchaudio.save(f.name, torch.from_numpy(audio), sampling_rate) f.flush() os.fsync(f) recording = Recording.from_file(f.name) # Note: MonoCut doesn't normally have an "alignment" attribute, # and a "load_alignment()" method. # We are dynamically extending it. cut = MonoCut(id="x", start=0, duration=duration, channel=0) cut.my_favorite_song = recording cut_trunc = cut.truncate(duration=5.0) restored_audio = cut_trunc.load_my_favorite_song() assert restored_audio.shape == (1, 80000) np.testing.assert_almost_equal(audio[:, :80000], restored_audio)
def test_cut_load_array_truncate(): """Check that loading a custom Array works after truncation.""" ivector = np.arange(20).astype(np.float32) with NamedTemporaryFile(suffix=".h5") as f, LilcomHdf5Writer(f.name) as writer: cut = MonoCut(id="x", start=0, duration=5, channel=0) cut.ivector = writer.store_array(key="utt1", value=ivector) cut = cut.truncate(duration=3) restored_ivector = cut.load_ivector() np.testing.assert_equal(ivector, restored_ivector)
def test_cut_load_temporal_array_truncate(): """Check the array loaded via TemporalArray is truncated along with the cut.""" with NamedTemporaryFile(suffix=".h5") as f, NumpyHdf5Writer(f.name) as writer: expected_duration = 52.4 # 131 frames x 0.4s frame shift == 52.4s cut = MonoCut(id="x", start=0, duration=expected_duration, channel=0) alignment = np.random.randint(500, size=131) cut.alignment = writer.store_array( key="utt1", value=alignment, frame_shift=0.4, temporal_dim=0 ) cut_trunc = cut.truncate(duration=5.0) alignment_piece = cut_trunc.load_alignment() assert alignment_piece.shape == (13,) # 5.0 / 0.4 == 12.5 ~= 13 np.testing.assert_equal(alignment[:13], alignment_piece)