【数据预处理】TIMIT语料库WAV文件转换
1 问题描述
这两天复现代码。先构造数据集,纯净语音、不同噪声、不同SNR的混合语音。其中纯净语音由两部分组成,IEEE corpus和TIMIT。
一开始我用MATLAB中的audioread读取音频文件,合成后用audiowrite保存下来。没有任何问题。
后来,师姐让我换成python处理,不管是wave还是scipy.io中的wavfile,在读取TIMIT的原始WAV时都会报错。
2 原因定位
通过上述问答以及TIMIT语料库的官方说明文件,我们可以发现TIMIT中的WAV文件是:
我们用notepad++打开任意一个数据集中的wav文件,可以看到以下内容作为开头:
而以同样方式打开普通的wav文件,则开头内容为:
3 解决思路
将SPHERE文件转换成WAV文件。
网上可以找到许多方法,在此我采用了Dystopia在基于各种分类算法的说话人识别(年龄段识别)一文中的方法。
Kaldi中tools下有SPHERE文件转换工具sph2pipe.exe
1.下载编译sph2pipe
转换工具:sph2pipe_v2.5,如果安装过Kaldi的话,可以直接使用 $KALDI_ROOT/tools/sph2pipe_v2.5/sph2pipe,如果没有安装的话,可以单独下载:http://sourceforge.net/projects/kaldi/files/sph2pipe_v2.5.tar.gz
如果是在Windows环境下的话直接使用sph2pipe.exe即可,如果是在linux环境下的话,则需要进行GCC编码:gcc -o sph2pipe *.c -lm
2.用re_sph2pipe.py脚本生成sph2pipe转换文件
#encoding="utf-8"
import os
import os.path
rootdir = "/data/Datasets/yuanpp/TIMIT"
timitpath = "/data/Datasets/yuanpp/TIMIT"
targetpath = "/data/Datasets/yuanpp/TIMIT_convert"
sph2pipepath = "/home/yuanpeipei/sph2pipe_v2.5/sph2pipe"
f = open('./make_sph2pipe_file.txt','w')
for root,dirs,files in os.walk(rootdir):
for fn in files:
if fn[len(fn)-3:len(fn)]=='wav':
sourcefile = timitpath+root[len(rootdir):]+"/"+fn
targetfile = targetpath + "/" + fn
s = sph2pipepath + " -f wav " + sourcefile+" "+targetfile+"\n"
f.write(s)
f.close()
生成make_sph2pipe_file.txt文件,内容为命令行。
/home/yuanpeipei/sph2pipe_v2.5/sph2pipe -f wav /data/Datasets/yuanpp/TIMIT/pure_utterance/validation/S_125_06.wav /data/Datasets/yuanpp/TIMIT_convert/S_125_06.wav
/home/yuanpeipei/sph2pipe_v2.5/sph2pipe -f wav /data/Datasets/yuanpp/TIMIT/pure_utterance/validation/S_130_03.wav /data/Datasets/yuanpp/TIMIT_convert/S_130_03.wav
/home/yuanpeipei/sph2pipe_v2.5/sph2pipe -f wav /data/Datasets/yuanpp/TIMIT/pure_utterance/validation/S_60_10.wav /data/Datasets/yuanpp/TIMIT_convert/S_60_10.wav
/home/yuanpeipei/sph2pipe_v2.5/sph2pipe -f wav /data/Datasets/yuanpp/TIMIT/pure_utterance/validation/S_130_06.wav /data/Datasets/yuanpp/TIMIT_convert/S_130_06.wav
... ...
3.在linux下执行shell命令
#!/bin/sh
while read line
do
$line
done < make_sph2pipe_file.txt
即可。
参考资料:
[3] reading a WAV file from TIMIT database in python
【数据预处理】TIMIT语料库WAV文件转换的更多相关文章
- C++标准库实现WAV文件读写
在上一篇文章RIFF和WAVE音频文件格式中对WAV的文件格式做了介绍,本文将使用标准C++库实现对数据为PCM格式的WAV文件的读写操作,只使用标准C++库函数,不依赖于其他的库. WAV文件结构 ...
- asterisk 语音文件转换
Centos wav to sln sox foo-in.wav -t raw -r 8000 -s -2 -c 1 foo-out.sln 当前目录下所有语音wav文件 转换成sln for a i ...
- WebRTC录音(2)-录音文件转换成WAV格式
以下是源码,大路货,从网上找的. 但是,这个东西在MacOS上是有问题的,原因在最后,都是泪啊. #include <stdio.h> #include <string.h> ...
- WAV和PCM文件转换的程序
using System;using System.IO;using System.Text;using System.Windows.Forms;using System.Runtime.Inter ...
- pcm数据生成wav文件
Qt由pcm数据生成wav文件 void AudioGrabber::saveWave(const QString &fileName, const QByteArray &raw, ...
- WAV相关:从PCM16 Little Endian数据转WAV文件
数据格式 [0.0, -0.0, -0.0, 0.0, 0.0, 0.0, 5.960464477539063e-08, 5.960464477539063e-08, 1.19209289550781 ...
- 将任意音频格式文件转换成16K采样率16bit的wav文件
此转换需要使用ffmpeg 假设有目录 d:\录音 目录有 张三.m4a, 李四.m4a xxx.m4a(其他任意格式音频触类旁通可以把 *.m4a改成*.*).批量转换成采样率16K,有符号,16b ...
- C#中使用WavHelper保存录音数据为wav文件
C#将录音数据文件保存为wav格式文件,这里使用到的是WavHelper工具类. WavHelper工具类: using System; using System.Collections.Generi ...
- 310实验室OTL问题----将写好的C++文件转换成Python文件,并将数据可视化
如图:文件夹 第一处:optimizer文件夹下的:optimizer.h文件中添加你所写代码的头文件 #include <OTL/Optimizer/Reference-NSGA-II/Re ...
随机推荐
- BFC (Block formatting context)
一:BFC 是什么 MDN解释: A block formatting context is a part of a visual CSS rendering of a Web page. ...
- 性能测试loadrunner安装
把杀毒软件关闭 1. 点击 HP_LoadRunner_12.02_Community_Edition_T7177-15059.exe 完成后,点击下一步 接受协议 点击安装 点击完成 TOOLS - ...
- PowerDesigner安装与使用教程
一.安装 PD下载:http://rj.baidu.com/soft/detail/16619.html?ald 补丁下载:http://pan.baidu.com/s/1hqEDUCG 图文安装教程 ...
- FSCapture注册码
企业版序列号: name:bluman serial/序列号/注册码:VPISCJULXUFGDDXYAUYF
- BZOJ1084_最大子矩阵_KEY
题目传送门 DP. 但要分类讨论,对于M=1和M=2的情况分别讨论. 1>M=1 设f[i][j]表示选了i个矩阵,到第j位.N^3转移.(前缀和) 2>M=2 设f[i][j][k]表示 ...
- PostgreSQL调整内存与IO的参数说明
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页 回到顶级页面:PostgreSQL索引页 [作者:高健@博客园 luckyjackgao ...
- jQuery学习- 子选择器与可见性选择器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Kubernetes学习之路(七)之Coredns和Dashboard二进制部署
一.CoreDNS部署 在 Cluster 中,除了可以通过 Cluster IP 访问 Service,Kubernetes 还提供了更为方便的 DNS 访问. (1)编辑coredns.yaml文 ...
- linux中mycat的配置,分片,以及主从复制
1.1 安装环境 1.jdk:要求jdk必须是1.7及以上版本 2.Mysql:推荐mysql是5.5以上版本 1.2 安装步骤 Mycat有windows.linux多种版本.本教程为lin ...
- chrome JS关闭当前页无效问题
如果没有父窗口,JS中 window.opener = null; window.open("", "_self"); window.close(); 对chr ...