我目前正在研究与 Asterisk 和 PHP Web 界面的一些电话集成。 我想为用户提供一个选项,以将他们自己的自定义问候语上传到 wav 文件中,然后一旦到达服务器,就将 wav 转换为 8000hz 的 gsm 文件。 目前,我正在尝试使用 sox 来完成此任务。
但是,似乎当我在 8khz sav 以外的任何内容之间转换为 gsm 时,gsm 文件严重失真。 这几乎就像它使文件速度减慢了 10 倍(wav 格式的 3 秒介绍变成了 30 秒 gsm 文件)我尝试了几种速度和重采样的组合,但无济于事。 理想情况下,我希望获取上传的任何 wav 文件并将其转换,而不需要用户承担太多责任来对其进行正确编码。 我绝对不是发烧友,所以如果有人能指出我正确的方向,我将不胜感激。
这是我用来将常规 16 位 .wav 文件转换为 8 位单声道 .gsm 文件的命令(工作正常):
sox input.wav -r 8000 -c1 output.gsm lowpass 4000 compand 0.02,0.05 -60,-60,-30,-10,-20,-8,-5,-8,-2,-8 -8 -7 0.05
我见过 sox 的情况,我需要分解更改并一个接一个地通过管道传输它们,而不是在一个命令中。
你的 sox cmd 是什么样的?
您可以先将 wav 转换为 8khz,然后转码,将一个 sox 调用的输出通过管道传输到另一个吗?
我用
sox foo.wav -r 8000 -c1 foo.gsm resample -ql
只是有点晚了,我目前使用的是:
sox somefile.wav -r 8000 -c1 output.gsm