我在linux mint 14中尝试使用sox和play foo.sph
播放.sph文件
并得到以下错误:
play FAIL formats: can't open input file 'foo.sph': sph: unsupported coding 'alaw'
不是sox支持alaw编码吗?我该怎么做才能播放这个文件?请注意,它可以成功播放ulaw。谢谢!
答案 0 :(得分:0)
以下是相关的SoX源代码(来自src/sphere.c
,从第74行开始):
if (!strcasecmp(fldsval, "ulaw") || !strcasecmp(fldsval, "mu-law"))
encoding = SOX_ENCODING_ULAW;
else if (!strcasecmp(fldsval, "pcm"))
encoding = SOX_ENCODING_SIGN2;
else {
lsx_fail_errno(ft, SOX_EFMT, "sph: unsupported coding `%s'", fldsval);
/* ... */
}
如您所见,格式处理程序只知道μ-law和PCM编码,没有别的。正如你所说,SoX确实有A-law的解码程序;因此,添加这些行就足够了:
else if (!strcasecmp(fldsval, "alaw"))
encoding = SOX_ENCODING_ALAW;
显然,如果您可以自己从源代码编译SoX,这只会帮助您。
一种可能更简单的方法是使用libsndfile驱动程序,该驱动程序应该支持Sphere文件中的A-law编码:play -t sndfile foo.sph