我在linux 14中,试图使用sox与.sph一起播放一个play foo.sph文件,得到了以下错误:play FAIL formats: can't open input file 'foo.sph': sph: unsupported coding 'alaw'
sox不支持alaw编码吗?我能做些什么来播放这个文件?请注意,它可以成功地玩ulaw。谢谢!
发布于 2013-08-12 09:11:11
下面是相关的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
https://stackoverflow.com/questions/18169817
复制相似问题