2

我在 linux mint 14 中并尝试使用 sox 播放 .sph 文件play foo.sph 并收到以下错误: play FAIL formats: can't open input file 'foo.sph': sph: unsupported coding 'alaw'

sox 不支持法律编码吗?我该怎么做才能播放这个文件?请注意,它可以成功播放 ulaw。谢谢!

4

1 回答 1

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

于 2013-08-12T09:11:11.750 回答