sox无法播放带有a-law编码的文件

时间:2013-08-11 07:40:10

标签: encoding sox

我在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。谢谢!

1 个答案:

答案 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