def relocate_audio_to_single_container(self, target_path): """ Copies every track to a single container. Afterwards all tracks in the container are linked against this single container. """ cont = containers.AudioContainer(target_path) cont.open() new_tracks = {} # First create a new container track for all existing tracks for track in self.tracks.values(): sr = track.sampling_rate samples = track.read_samples() cont.set(track.idx, samples, sr) new_track = tracks.ContainerTrack(track.idx, cont) new_tracks[track.idx] = new_track # Update track list of corpus self._tracks = new_tracks # Update utterances to point to new tracks for utterance in self.utterances.values(): new_track = self.tracks[utterance.track.idx] utterance.track = new_track cont.close()
def test_read_samples_with_duration(self, sample_container): sample_track = tracks.ContainerTrack('track1', sample_container) samples = sample_track.read_samples(duration=5 / 16000) assert samples.dtype == np.float32 assert np.allclose(samples, np.array([0.1, 0.2, 0.3, 0.4, 0.5]), atol=1.e-4)
def test_read_samples_with_offset(self, sample_container): sample_track = tracks.ContainerTrack('track1', sample_container) samples = sample_track.read_samples(offset=5 / 16000) assert samples.dtype == np.float32 assert np.allclose(samples, np.array([0.6, 0.7, 0.8, 0.9, 1.0]), atol=1.e-4)
def test_read_samples(self, sample_container): sample_track = tracks.ContainerTrack('track1', sample_container) samples = sample_track.read_samples() assert samples.dtype == np.float32 assert np.allclose( samples, np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]), atol=1.e-4)
def test_read_frames_matches_length(self, tmpdir): cont_path = os.path.join(tmpdir.strpath, 'audio.hdf5') cont = containers.AudioContainer(cont_path) cont.open() content = np.random.random(7) cont.set('track', content, 16000) track = tracks.ContainerTrack('some_idx', cont, 'track') data = list(track.read_frames(frame_size=2, hop_size=1)) frames = np.array([x[0] for x in data]) last = [x[1] for x in data] assert frames.shape == (6, 2) assert frames.dtype == np.float32 assert last[:-1] == [False] * (len(data) - 1) assert last[-1] cont.close()
def read_tracks_from_audio_containers(audio_path, corpus): if os.path.isfile(audio_path): base_path = os.path.dirname(audio_path) audio_tracks = textfile.read_separated_lines(audio_path, separator=' ', max_columns=3) audio_containers = {} for entry in audio_tracks: track_idx = entry[0] container_path = entry[1] key = entry[2] if container_path in audio_containers.keys(): container = audio_containers[key] else: abs_path = os.path.abspath(os.path.join(base_path, container_path)) container = containers.AudioContainer(abs_path) track = tracks.ContainerTrack(track_idx, container, key) corpus.import_tracks(track)
def test_read_frames(self, tmpdir): cont_path = os.path.join(tmpdir.strpath, 'audio.hdf5') cont = containers.AudioContainer(cont_path) cont.open() content = np.random.random(10044) cont.set('track', content, 16000) track = tracks.ContainerTrack('some_idx', cont, 'track') data = list(track.read_frames(frame_size=400, hop_size=160)) frames = np.array([x[0] for x in data]) last = [x[1] for x in data] assert frames.shape == (62, 400) assert frames.dtype == np.float32 assert np.allclose(frames[0], content[:400], atol=0.0001) expect = np.pad(content[9760:], (0, 116), mode='constant') assert np.allclose(frames[61], expect, atol=0.0001) assert last[:-1] == [False] * (len(data) - 1) assert last[-1] cont.close()
def test_read_samples_with_resampling(self, sample_container): sample_track = tracks.ContainerTrack('track1', sample_container) samples = sample_track.read_samples(sr=8000) assert samples.dtype == np.float32 assert samples.shape[0] == 5
def test_duration(self, sample_container): sample_track = tracks.ContainerTrack('track1', sample_container) assert sample_track.duration == pytest.approx(10 / 16000)
def test_num_samples(self, sample_container): sample_track = tracks.ContainerTrack('track1', sample_container) assert sample_track.num_samples == 10
def test_sampling_rate(self, sample_container): sample_track = tracks.ContainerTrack('track1', sample_container) assert sample_track.sampling_rate == 16000