| | |
| | | from pathlib import Path |
| | | from typing import Union |
| | | |
| | | import random |
| | | import numpy as np |
| | | import soundfile |
| | | import librosa |
| | | from typeguard import check_argument_types |
| | | |
| | | import torch |
| | | import torchaudio |
| | | |
| | | from funasr.fileio.read_text import read_2column_text |
| | | |
| | |
| | | always_2d: bool = False, |
| | | normalize: bool = False, |
| | | dest_sample_rate: int = 16000, |
| | | speed_perturb: Union[list, tuple] = None, |
| | | ): |
| | | assert check_argument_types() |
| | | self.fname = fname |
| | |
| | | self.normalize = normalize |
| | | self.data = read_2column_text(fname) |
| | | self.dest_sample_rate = dest_sample_rate |
| | | self.speed_perturb = speed_perturb |
| | | |
| | | def __getitem__(self, key): |
| | | wav = self.data[key] |
| | |
| | | wav, sr=self.dest_sample_rate, mono=self.always_2d, dtype=self.dtype |
| | | ) |
| | | |
| | | if self.speed_perturb is not None: |
| | | speed = random.choice(self.speed_perturb) |
| | | if speed != 1.0: |
| | | array, _ = torchaudio.sox_effects.apply_effects_tensor( |
| | | torch.tensor(array).view(1, -1), rate, |
| | | [['speed', str(speed)], ['rate', str(rate)]]) |
| | | array = array.view(-1).numpy() |
| | | |
| | | if array.ndim==2: |
| | | array=array.transpose((1, 0)) |
| | | |
| | | return rate, array |
| | | |
| | | def get_path(self, key): |