python - 初始化中……命令 'sox'返回了非零的退出状态2

标签 python audio exchange-server htk

我检查了类似的错误消息问题,但没有找到任何适合我的情况的内容。我正在尝试使用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()

最佳答案

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
            # ...

关于python - 初始化中……命令 'sox'返回了非零的退出状态2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24250366/

相关文章:

ruby - 从 Ruby 访问 Microsoft Exchange 服务器

ssl - 无法使用 TLS 将邮件发送到本地 SMTP 服务器

python - 如何使用 Tornado 单元测试来测试 "uploading a file"?

python - 在循环的Django模板中,检查当前项目是否与前一个项目不同

web-applications - 需要媒体共享Web应用程序,按组控制访问

python - pygame中的音乐类型未实现位置

email - 如何从我的 Gmail 帐户接收推送通知?

python - 将 datetime64 系列设置为 pandas dataframe 索引会自动添加时区偏移

python - 在 python 中是否有一种迭代多个列表(有时它们是单值)的好方法

swift - 在 SwiftUI 应用程序中放置音频播放代码的位置