初始化...命令 'sox' 返回非零退出状态 2
我查看了类似的错误信息问题,但没有找到完全符合我情况的。我正在尝试使用HTK、Prosodylab-aligner和SoX将一个.wav文件和一个.lab文件进行时间对齐。
这是我输入的内容(使用Prosodylab-aligner):
./align.py /path/to/files
结果只出现了这一行代码:
Command 'sox' returned non-zero exit status 2
我查了一下这段代码的意思,似乎是说缺少了某个命令或关键词。
我觉得问题出在align.py
这个文件里,但我不确定具体是哪里有问题。这里是文件中提到SoX的部分。
def _check_aud(self, wav_list, train=False):
"""
Check audio files, mixing down to mono and downsampling if
necessary. Writes copy_scp and the training or testing SCP files
"""
copy_scp = open(self.copy_scp, 'a')
check_scp = open(self.train_scp if train else self.test_scp, 'w')
i = 0
if self.has_sox:
for wav in wav_list:
head = os.path.splitext(os.path.split(wav)[1])[0]
mfc = os.path.join(self.aud_dir, head + '.mfc')
w = wave.open(wav, 'r')
pids = [] # pids
if (w.getframerate() != self.sr) or (w.getnchannels() > 1):
new_wav = os.path.join(self.aud_dir, head + '.wav')
pids.append(Popen(['sox', '-G', wav, '-b', '16',
new_wav, 'remix', '-',
'rate', str(self.sr),
'dither', '-s'], stderr=PIPE))
wav = new_wav
for pid in pids: # do a join
retcode = pid.wait()
if retcode != 0:
raise CalledProcessError(retcode, 'sox')
print >> copy_scp, '"{0}" "{1}"'.format(wav, mfc)
print >> check_scp, '"{0}"'.format(mfc)
w.close()
else:
for wav in wav_list:
head = os.path.splitext(wav)[0]
mfc = os.path.join(self.aud_dir, head + '.mfc')
w = wave.open(wav, 'r')
if (w.getframerate() != self.sr) or (w.getnchannels() != 1):
error('File {0} needs resampled but Sox not found ', w)
print >> copy_scp, '"{0}" "{1}"'.format(wav, mfc)
print >> check_scp, '"{0}"'.format(mfc)
w.close()
copy_scp.close()
check_scp.close()
1 个回答
0
把 sox
这个命令行从 pids.append(Popen(...))
这个调用中提取出来,放到一个叫 cmd
的变量里,然后在运行之前把它打印出来。
这样你就能得到一个可以重现问题的命令行,可能会看到更详细的错误信息,还可以通过调整参数来缩小问题的范围。
# ...
new_wav = os.path.join(self.aud_dir, head + '.wav')
cmd = ['sox', '-G', wav, '-b', '16',
new_wav, 'remix', '-', 'rate',
str(self.sr), 'dither', '-s']
print "About to execute command:\n%s" % ' '.join(cmd)
pids.append(Popen(cmd, stderr=PIPE))
wav = new_wav
# ...