我在 linux mint 14 中并尝试使用 sox 播放 .sph 文件play foo.sph
并收到以下错误:
play FAIL formats: can't open input file 'foo.sph': sph: unsupported coding 'alaw'
sox 不支持法律编码吗?我该怎么做才能播放这个文件?请注意,它可以成功播放 ulaw。谢谢!
以下是相关的 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