play命令不支持变速,必须用sox配合speed、tempo或rate效果器;speed保持音高仅调速,tempo适合有节拍音频,rate会改变采样率导致变调。

不能直接用 play 命令调整播放速度——它压根不支持变速参数。 这是很多刚接触命令行音频处理的人踩的第一个坑:以为 play(来自 SoX 工具集)像 GUI 软件一样能拖滑块调速,结果加了 -r 或 --rate 一通乱试,不是报错就是音高畸变。真相是:play 本身只负责“播放”,变速必须靠 SoX 的 speed、tempo 或 rate 效果器显式调用。
用 sox + speed 效果器实现无损听感变速
这是最常用也最稳妥的方式:保持音高不变,仅改变语速。比如把播客加速到 1.4 倍速听,人声不会变尖或发闷。
-
speed参数接受浮点数,1.4表示快 40%,0.85表示慢 15% - 实际命令不是
play input.mp3 speed 1.4(会报错),而是:sox input.mp3 -d speed 1.4
其中-d表示实时播放到默认声卡 - 如果想保存变速后文件,把
-d换成输出路径,如:sox input.mp3 output_14x.mp3 speed 1.4 - 注意:输入文件采样率需被正确识别,MP3 若含 ID3v2 标签可能干扰解析,可先用
sox --i input.mp3确认基本信息
别误用 rate 效果器——它改的是采样率,不是播放速度
很多人看到文档里有 rate 就以为是“变速”,结果执行 sox input.mp3 -d rate 48000,发现声音变调、失真严重。这是因为 rate 是重采样操作,强制把原始音频重采为指定 Hz,既改变速度又扭曲音高。
-
rate的典型用途是格式转换(如将 44.1kHz 转为 48kHz 适配某些设备),不是听感变速 - 若你硬要用
rate“凑”出类似变速效果,必须配合pitch补偿,公式复杂且易出错,远不如直接用speed - 真实场景中,除非你在做嵌入式音频流适配或 DSP 开发,否则请绕开
rate做播放加速
临时调试推荐 tempo:更智能的节奏拉伸
当音频含明显节拍(比如带背景音乐的讲座、ASMR、有鼓点的播客),speed 可能导致节奏生硬卡顿。tempo 效果器采用相位声码器算法,在变速同时尽量维持节奏稳定性和瞬态清晰度。
- 语法类似:
sox input.mp3 -d tempo 1.3(1.3 倍节奏伸缩) - 它比
speed计算开销略高,但对人耳更友好;实测在 1.2–1.6x 区间优势明显 - 不支持负值或极值(如
tempo 0.3会失败),下限约 0.5,上限约 2.0 - 若执行时报
unable to allocate memory for tempo,说明音频过长或内存不足,可先用sox input.mp3 short.wav trim 0 120截取前两分钟测试
真正容易被忽略的是缓存与延迟问题:用 sox ... -d 播放时,SoX 默认启用音频缓冲,首次启动可能有 0.3–0.8 秒静音延迟;若你正用它做实时字幕同步或跟读训练,得加 gain -h 或手动设 buffer 参数——但这已经跨进音频流调试的深水区了,普通变速需求不必碰。










