最近做语音分离实验需要用到wsj0-2mix数据集,但是从李宏毅语音分离教程里面获取的wsj0-2mix只有一部分。从网上获取到了完整的WSJO数据集后,由于原始的语音文件后缀wv1或者wv2,创建wsj0-2mix需要wav文件,所以需要通过工具进行转换。网上的教程使用后只生成一堆空文件夹,无法生成转换后的wav文件。因此,在成功解决这个问题后,把采用的方法分享下,按照下列步骤能完美进行转换。
准备
平台:Windows
工具:Python、sph2pipe
一、获取WSJ0数据集
可在官网获取:
二、安装sph2pipe
大家按照之前网上的方法只能生成一堆空文件夹就是因为没有安装sph2pipe
三、处理代码
平台准备:
python 3.6
os包
WSJ0 corpus———csr_1_senn
sph2pipe包
csr_1_senn,sph2pipe包和wv_convert_wav.py在同一个目录下
代码:wv_convert_wav.py
import os
# the root dir for WSJ0 corpus
root_dir = "csr_1_senn"
# the disc number
disc_dir = []
disc_index = 0
for list_disc in os.listdir(root_dir):
if list_disc not in ["doc", "11-13.1"]:
# the data dir for each disc
disc_dir.append(os.path.join(root_dir, list_disc, "wsj0"))
disc_index = disc_index + 1
if not os.path.exists("wsj0"):
os.mkdir("wsj0")
# the sub_data dir for each disc
for i, list_sub_data in enumerate(disc_dir):
for sub_data_dir in os.listdir(list_sub_data):
s_dir = os.path.join("wsj0", sub_data_dir)
if not os.path.exists(s_dir):
os.mkdir(s_dir)
lower = sub_data_dir.split(sep=' ')
if sub_data_dir[0][0] == 's':
datatype_dir = os.path.join(list_sub_data, sub_data_dir)
for list_spk in os.listdir(datatype_dir):
spk_dir = os.path.join(s_dir, list_spk)
spk_dir_abs = os.path.join(datatype_dir, list_spk)
if not os.path.exists(spk_dir):
os.mkdir(spk_dir)
for wv_file in os.listdir(spk_dir_abs):
if not wv_file.endswith('.wv1'):
continue
speech_dir = os.path.join(spk_dir_abs, wv_file)
target_name = wv_file.split(sep='.')[0] + '.wav'
target_dir = spk_dir + '/' + target_name
os.system('./sph2pipe ' + speech_dir + ' -f rif ' + target_dir)