【问题标题】:sox cannot play files with a-law encodingsox 无法播放具有 a-law 编码的文件
【发布时间】:2013-08-11 07:40:10
【问题描述】:

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

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

【问题讨论】:

    标签: encoding sox


    【解决方案1】:

    这里是相关的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 2012-09-05
      • 2012-11-17
      • 2018-10-15
      • 1970-01-01
      相关资源
      最近更新 更多