(惨痛教训) java runtime().exec() 提示 No such file or directory

 

 最近花了三天解决了一个不是问题的问题,花三整整三天,可谓真是太惨痛了。

 

 近期做呼叫中心的语音合成(TTS),使用了百度语音平台进行语音合成。百度语音合成出来的语音是MP3格

 

 式。这里共遇到几个问题:

 

(1)百度语音平台导出来的语音格式是 mp3, 强制转成 wav 时,正常播放没有问题。但是通过 sox 做转换时

         提示 RIFF header not found  等错误。

 

(2)如果以 mp3 的方式导出,执行 sox xxx.mp3 -r 8000 -c 1 xxx.vox 时,提示 sox 不支持 mp3。通过编译的方式后,解决了 sox 支持 mp3 的问题。

 

最终定下来的解决方案是:百度语音导出成 mp3 ,然后调用 sox 的方式转换成 vox 格式,可以在电话系统中直接播放。

 

定下方案后,发现在 java 后台执行,执行系统转换命令:

Process p = Runtime.getRuntime().exec("sox xxx.mp3 -r 8000 -c 1 xxx.vox"); 

 

 

 

提示:Cannot run program "sox": java.io.IOException: error=2, No such file or directory

 

但是在控制台直接执行 sox xxx.mp3 -r 8000 -c 1 xxx.vox 时,挺是没有问题的。

 

开始以为是 权限问题,在转换前将语音文件的权限增加到最大,但是还是提示相同的错误。

 

经过各种测试,还是没有办法解决,

 

No such file or directory ,难道是文件不存在? 

 

后来决定不直接执行 sox ,而是通过执行 复制操作,确定是否文件真的存在。即是

 

Process p = Runtime.getRuntime().exec(cp xxxx.mp3 xxx_bak.mp3);

 

谁知道写错了,写成了 copy xxx.mp3 xxx_bak.mp3 居然提示同样的错误,后来改正后,可以正常执行。

 

看来 No such file or directory 这个提示,并非是要复制或是要转换的文件不存在,看来是操作命令的问题。

 

即是 sox  这个操作命令不存在。

 

最后,通过 /usr/bin/sox xxx.mp3 -r 8000 -c 1 xxx.vox ,终于能正常执行。

 

经过三天才真正定位到错误原因。

 

 

这次解决问题完全是因为写错了  copy 才定位到的原因,真是无心插柳。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值