AudioReader 是Dual-Path-RNN-Pytorch源码中用来读入scp文件的工具类,它的输入是一个scp文件的全路径。

有关scp文件,它是一个文件与文件路径的记录文件。 内容样例如下

1.wav  /local/file/path/1.wav
2.wav  /local/file/path/2.wav
3.wav  /local/file/path/3.wav
4.wav  /local/file/path/4.wav
5.wav  /local/file/path/5.wav
6.wav  /local/file/path/6.wav

AudioReader 通过torchaudio读入文件中的每一个音频文件,这里注意一下,有些同学可能安装完torchaudio后但是会有如下错误:
No audio I/O backend is available
torchaudio需要一个具体“做事”的软件(backend)去执行载入音频文件,所以需要安装它。

torchaudio在windows下的backend默认为soundfile
使用pip install SoundFile 即可以安装
torchaudio在linux下的backend默认为sox

所以它的读操作如下,即使用了torchaudio.load

def read_wav(fname, return_rate=False):'''Read wavfile using Pytorch audioinput:fname: wav file pathreturn_rate: Whether to return the sampling rateoutput:src: output tensor of size C x L L is the number of audio frames C is the number of channels. sr: sample rate'''src, sr = torchaudio.load(fname, channels_first=True)if return_rate:return src.squeeze(), srelse:return src.squeeze()

AudioReader 类本身可以理解为一个字典(dict),它的内部实现形式为

{'1.wav': '/local/file/path/1.wav','2.wav': '/local/file/path/2.wav','3.wav': '/local/file/path/3.wav','4.wav': '/local/file/path/4.wav','5.wav': '/local/file/path/5.wav','6.wav': '/local/file/path/6.wav'
}

但是实际通过字典返回时,是把对应的文件load完返回数据的。这样方便调用者使用。
同时,它扩展了字典key值,允许使用int来索引。总结AudioReader不复杂,但是设计上还是不错的。

下面是全部源码,请参考

def read_wav(fname, return_rate=False):'''Read wavfile using Pytorch audioinput:fname: wav file pathreturn_rate: Whether to return the sampling rateoutput:src: output tensor of size C x L L is the number of audio frames C is the number of channels. sr: sample rate'''src, sr = torchaudio.load(fname, channels_first=True)if return_rate:return src.squeeze(), srelse:return src.squeeze()def write_wav(fname, src, sample_rate):'''Write wav fileinput:fname: wav file pathsrc: frames of audiosample_rate: An integer which is the sample rate of the audiooutput:None'''torchaudio.save(fname, src, sample_rate)class AudioReader(object):'''Class that reads Wav format filesInput as a different scp file addressOutput 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_rateself.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 srcdef __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)

【Dual-Path-RNN-Pytorch源码分析】AudioReader相关推荐

  1. PyTorch 源码分析:Optimizer类

    PyTorch对Optimizer类的实现大部分都在Python上,只有计算用到了C++的部分,所以还是可以继续分析的. 总览 Optimizer类是所有具体优化器类的一个基类.下面一幅图表示一下. ...

  2. Pytorch源码分析

    目录 命名空间/类/方法/函数/变量 torch.autograd.Function中的ctx参数 DDP(DistributedDataParallel)的构造函数 torch.floor(inpu ...

  3. Pytorch Mobile 之Android Demo源码分析

    现如今,在边缘设备上运行机器学习/深度学习变得越来越流行,它需要更低的时延. 而从Pytorch 1.3开始,我们就可以使用Pytorch将模型部署到Android或者ios设备中. Pytorch官 ...

  4. PyTorch 源码解读之 torch.serialization torch.hub

    作者 | 123456 来源 | OpenMMLab 编辑 | 极市平台 导读 本文解读基于PyTorch 1.7版本,对torch.serialization.torch.save和torch.hu ...

  5. Transformer-XL解读(论文 + PyTorch源码)

    前言 目前在NLP领域中,处理语言建模问题有两种最先进的架构:RNN和Transformer.RNN按照序列顺序逐个学习输入的单词或字符之间的关系,而Transformer则接收一整段序列,然后使用s ...

  6. 【Android SDM660源码分析】- 03 - UEFI XBL GraphicsOutput BMP图片显示流程

    [Android SDM660源码分析]- 03 - UEFI XBL GraphicsOutput BMP图片显示流程 1. GraphicsOutput.h 2. 显示驱动初化 DisplayDx ...

  7. NeRF 源码分析解读(一)

    NeRF 源码解读(一) 前言 NeRF 是三维视觉中新视图合成任务的启示性工作,最近领域内出现了许多基于 NeRF 的变种工作.本文以pytorch 版 NeRF 作为基础对 NeRF 的代码进行分 ...

  8. TCP拥塞控制算法BBR源码分析

      BBR是谷歌与2016年提出的TCP拥塞控制算法,在Linux4.9的patch中正式加入.该算法一出,瞬间引起了极大的轰动.在CSDN上也有众多大佬对此进行分析讨论,褒贬不一.   本文首先对源 ...

  9. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  10. ELMo解读(论文 + PyTorch源码)

    ELMo的概念也是很早就出了,应该是18年初的事情了.但我仍然是后知后觉,居然还是等BERT出来很久之后,才知道有这么个东西.这两天才仔细看了下论文和源码,在这里做一些记录,如果有不详实的地方,欢迎指 ...

最新文章

  1. 构建dubbo分布式平台-maven构建根项目
  2. MySQL 5.6.6 LABS 版本 下载 已经内含 Memcached
  3. String s=new String(abc)创建了2个对象的原因
  4. JCO3远程调用SAP接口随笔一(配置连接池)
  5. Gis 热点技术分析
  6. linux命令取数字前两位,linux中head命令使用详解(显示开头数量的文字块)
  7. 网站域名解析端口_环境测试必备,无需注册域名,免费动态IP解析一键解析本地网站...
  8. springMVC两种方式实现多文件上传及效率比较
  9. 【报告分享】2021中国数据智能产业发展研究报告.pdf(附下载链接)
  10. 中国特威兹勒行业市场供需与战略研究报告
  11. (客户端)发送请求====>(到服务器端) 过程分析
  12. 社工查询-最强社工查询网址汇总
  13. matlab 深度网络,深度信念网络matlab代码
  14. win10+Ubuntu双系统下如何完美卸载Ubuntu系统
  15. 【MES】MES能为制造企业做什么,解决什么问题?
  16. mie散射理论方程_A. Mie米散射理论基础知识讲解
  17. 思途cms php文件说明,思途旅游CMS系统二次开发说明文档(v5.0).pdf
  18. 计算机计算器logo,电脑计算器在哪打开
  19. 国产操作系统厂商中科红旗解散清算内幕
  20. 唐骏离职新华都当老板

热门文章

  1. Python命令行参数解析模块------argparse
  2. 拜耳与Recursion联手加强数字化药物发现
  3. 基于DeepChem的溶解度预测(图形卷积,神经网络)
  4. PyTorch | (3)Tensor及其基本操作
  5. python函数式编程模式_函数式编程指引
  6. 临床基因组学数据分析实战开课啦!!!
  7. 中科院基因组所高远组诚聘生物信息学方向助理/副研及博士
  8. 病毒组研究的挑战-相关的新兴技术
  9. USEARCH11新功能简介
  10. Nature Methods:宏基因组物种组成分析工具MetaPhlAn2