def _load(self, key): src, sr = read_wav(self.index_dict[key], return_rate=True) if self.sample_rate is not None and sr != self.sample_rate: raise RuntimeError('SampleRate mismatch: {:d} vs {:d}'.format( sr, self.sample_rate)) return src
时间: 2024-03-29 08:38:13 浏览: 90
这是一个函数,可以看出它用于读取音频文件并返回读取的音频数据。函数名为 `_load`,接收一个参数 `key`,表示要读取的音频文件在索引字典中的键值。函数使用 `read_wav` 函数读取音频文件,读取的数据存储在 `src` 变量中。如果设置了 `sample_rate` 参数,且读取到的音频文件的采样率 `sr` 与 `sample_rate` 不一致,则会抛出异常。最后,函数返回读取到的音频数据 `src`。
相关问题
class AudioReader(object): ''' Class that reads Wav format files Input as a different scp file address Output a matrix of wav files in all scp files. ''' def __init__(self, scp_path, sample_rate=8000): super(AudioReader, self).__init__() self.sample_rate = sample_rate self.index_dict = handle_scp(scp_path) self.keys = list(self.index_dict.keys()) def _load(self, key): src, sr = read_wav(self.index_dict[key], return_rate=True) if self.sample_rate is not None and sr != self.sample_rate: raise RuntimeError('SampleRate mismatch: {:d} vs {:d}'.format( sr, self.sample_rate)) return src def __len__(self): return len(self.keys) def __iter__(self): for key in self.keys: yield key, self._load(key) def __getitem__(self, index): if type(index) not in [int, str]: raise IndexError('Unsupported index type: {}'.format(type(index))) if type(index) == int: num_uttrs = len(self.keys) if num_uttrs < index and index < 0: raise KeyError('Interger index out of range, {:d} vs {:d}'.format( index, num_uttrs)) index = self.keys[index] if index not in self.index_dict: raise KeyError("Missing utterance {}!".format(index)) return self._load(index)
这段代码定义了一个 AudioReader 类,用于读取多个 wav 格式的音频文件。构造函数的参数为一个 scp 文件的路径和采样率,默认为 8000。类中定义了 `_load` 函数来读取每个 wav 文件,并进行采样率匹配。另外,类还实现了 `__len__`、`__iter__` 和 `__getitem__` 等函数,以支持对音频文件的遍历和索引访问。
解释代码:class SpectrogramReader(object): """ Wrapper for short-time fourier transform of dataset """ def __init__(self, wave_scp, **kwargs): if not os.path.exists(wave_scp): raise FileNotFoundError("Could not find file {}".format(wave_scp)) self.stft_kwargs = kwargs self.wave_dict = parse_scps(wave_scp) self.wave_keys = [key for key in self.wave_dict.keys()] logger.info( "Create SpectrogramReader for {} with {} utterances".format( wave_scp, len(self.wave_dict))) def __len__(self): return len(self.wave_dict) def __contains__(self, key): return key in self.wave_dict # stft def _load(self, key): return stft(self.wave_dict[key], **self.stft_kwargs) # sequential index def __iter__(self): for key in self.wave_dict: yield key, self._load(key) # random index def __getitem__(self, key): if key not in self.wave_dict: raise KeyError("Could not find utterance {}".format(key)) return self._load(key)
这段代码定义了一个类 SpectrogramReader,它是一个用于数据集的短时傅里叶变换的包装器。在初始化时,需要传入一个音频文件列表(wave_scp)和其他参数(**kwargs),在构造函数中会检查文件列表是否存在,然后解析文件列表得到一个音频文件字典(wave_dict),并获取该字典的键(wave_keys)。该类还定义了两个特殊方法 __len__ 和 __contains__,用于获取字典长度和检查某个键是否在字典中。
阅读全文
相关推荐
















