【数据预处理】TIMIT语料库WAV文件转换

1 问题描述

这两天复现代码。先构造数据集,纯净语音、不一样噪声、不一样SNR的混合语音。其中纯净语音由两部分组成,IEEE corpus和TIMIT。html

一开始我用MATLAB中的audioread读取音频文件,合成后用audiowrite保存下来。没有任何问题。python

后来,师姐让我换成python处理,无论是wave仍是scipy.io中的wavfile,在读取TIMIT的原始WAV时都会报错。linux

stackoverflow上相关问题及解决方案算法

2 缘由定位

经过上述问答以及TIMIT语料库的官方说明文件,咱们能够发现TIMIT中的WAV文件是:shell

 

咱们用notepad++打开任意一个数据集中的wav文件,能够看到如下内容做为开头:工具

而以一样方式打开普通的wav文件,则开头内容为:编码

3 解决思路

将SPHERE文件转换成WAV文件。spa

网上能够找到许多方法,在此我采用了Dystopia基于各类分类算法的说话人识别(年龄段识别)一文中的方法。
.net

Kaldi中tools下有SPHERE文件转换工具sph2pipe.exe命令行

1.下载编译sph2pipe

jacoxuWSJ0数据中的.wv1文件(sph)读取

转换工具: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转换文件

 1 #encoding="utf-8"
 2 import os  3 import os.path  4 rootdir = "/data/Datasets/yuanpp/TIMIT"
 5 timitpath = "/data/Datasets/yuanpp/TIMIT"
 6 targetpath = "/data/Datasets/yuanpp/TIMIT_convert"
 7 sph2pipepath = "/home/yuanpeipei/sph2pipe_v2.5/sph2pipe"
 8 f = open('./make_sph2pipe_file.txt','w')  9 for root,dirs,files in os.walk(rootdir): 10     for fn in files: 11         if fn[len(fn)-3:len(fn)]=='wav': 12             sourcefile = timitpath+root[len(rootdir):]+"/"+fn 13             targetfile = targetpath + "/" + fn 14             s = sph2pipepath + " -f wav " + sourcefile+" "+targetfile+"\n"
15  f.write(s)
16 f.close()

生成make_sph2pipe_file.txt文件,内容为命令行。

1 /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 2 /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 3 /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 4 /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 5 ... ...

3.在linux下执行shell命令

1 #!/bin/sh
2 while read line 3 do 4  $line 5 done < make_sph2pipe_file.txt

便可。

参考资料:

[1] 基于各类分类算法的说话人识别(年龄段识别)

[2] WSJ0数据中的.wv1文件(sph)读取

[3] reading a WAV file from TIMIT database in python

相关文章
相关标签/搜索