【Dual-Path-RNN-Pytorch源码分析】AudioReader
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相关推荐
- PyTorch 源码分析:Optimizer类
PyTorch对Optimizer类的实现大部分都在Python上,只有计算用到了C++的部分,所以还是可以继续分析的. 总览 Optimizer类是所有具体优化器类的一个基类.下面一幅图表示一下. ...
- Pytorch源码分析
目录 命名空间/类/方法/函数/变量 torch.autograd.Function中的ctx参数 DDP(DistributedDataParallel)的构造函数 torch.floor(inpu ...
- Pytorch Mobile 之Android Demo源码分析
现如今,在边缘设备上运行机器学习/深度学习变得越来越流行,它需要更低的时延. 而从Pytorch 1.3开始,我们就可以使用Pytorch将模型部署到Android或者ios设备中. Pytorch官 ...
- PyTorch 源码解读之 torch.serialization torch.hub
作者 | 123456 来源 | OpenMMLab 编辑 | 极市平台 导读 本文解读基于PyTorch 1.7版本,对torch.serialization.torch.save和torch.hu ...
- Transformer-XL解读(论文 + PyTorch源码)
前言 目前在NLP领域中,处理语言建模问题有两种最先进的架构:RNN和Transformer.RNN按照序列顺序逐个学习输入的单词或字符之间的关系,而Transformer则接收一整段序列,然后使用s ...
- 【Android SDM660源码分析】- 03 - UEFI XBL GraphicsOutput BMP图片显示流程
[Android SDM660源码分析]- 03 - UEFI XBL GraphicsOutput BMP图片显示流程 1. GraphicsOutput.h 2. 显示驱动初化 DisplayDx ...
- NeRF 源码分析解读(一)
NeRF 源码解读(一) 前言 NeRF 是三维视觉中新视图合成任务的启示性工作,最近领域内出现了许多基于 NeRF 的变种工作.本文以pytorch 版 NeRF 作为基础对 NeRF 的代码进行分 ...
- TCP拥塞控制算法BBR源码分析
BBR是谷歌与2016年提出的TCP拥塞控制算法,在Linux4.9的patch中正式加入.该算法一出,瞬间引起了极大的轰动.在CSDN上也有众多大佬对此进行分析讨论,褒贬不一. 本文首先对源 ...
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- ELMo解读(论文 + PyTorch源码)
ELMo的概念也是很早就出了,应该是18年初的事情了.但我仍然是后知后觉,居然还是等BERT出来很久之后,才知道有这么个东西.这两天才仔细看了下论文和源码,在这里做一些记录,如果有不详实的地方,欢迎指 ...
最新文章
- 构建dubbo分布式平台-maven构建根项目
- MySQL 5.6.6 LABS 版本 下载 已经内含 Memcached
- String s=new String(abc)创建了2个对象的原因
- JCO3远程调用SAP接口随笔一(配置连接池)
- Gis 热点技术分析
- linux命令取数字前两位,linux中head命令使用详解(显示开头数量的文字块)
- 网站域名解析端口_环境测试必备,无需注册域名,免费动态IP解析一键解析本地网站...
- springMVC两种方式实现多文件上传及效率比较
- 【报告分享】2021中国数据智能产业发展研究报告.pdf(附下载链接)
- 中国特威兹勒行业市场供需与战略研究报告
- (客户端)发送请求====>(到服务器端) 过程分析
- 社工查询-最强社工查询网址汇总
- matlab 深度网络,深度信念网络matlab代码
- win10+Ubuntu双系统下如何完美卸载Ubuntu系统
- 【MES】MES能为制造企业做什么,解决什么问题?
- mie散射理论方程_A. Mie米散射理论基础知识讲解
- 思途cms php文件说明,思途旅游CMS系统二次开发说明文档(v5.0).pdf
- 计算机计算器logo,电脑计算器在哪打开
- 国产操作系统厂商中科红旗解散清算内幕
- 唐骏离职新华都当老板