소스 검색

fix(edge-tts): 忽略 speed 参数,强制按 1.0 生成

Edge TTS 的 --rate 参数是后处理时间拉伸(与 HTML5 audio.playbackRate /
ffmpeg atempo 等价),听感上和'播放器减速'完全一样。在服务端做一次
没有意义——徒增文件处理、调试复杂度、用户认知成本。

策略调整:
- Edge TTS(CLI):忽略 voiceParams.speed,永远按 1.0 生成。用户想要
  慢速/快速,直接在播放器 UI 上调倍速按钮即可。
- 大模型 TTS(阿里云 Qwen-TTS Instruct / CosyVoice):保留 speed 参数,
  走模型级慢速生成路径(听感比后处理更好,因为模型重新组织韵律和停顿)。

实测验证:book 63 voiceSpeed 临时改回 0.5 触发 Edge TTS 重生成,
新音频时长 4:49.90(=1.0x),而不是 9:39(=0.5x)。log 输出:
  [EdgeTTS] 忽略用户/AI 设置的 speed=0.5,强制按 1.0 生成...
MyFramework User 1 개월 전
부모
커밋
dd1fea03
1개의 변경된 파일11개의 추가작업 그리고 5개의 파일을 삭제
  1. 11 5
      server/src/modules/tts/edge-tts.provider.ts

+ 11 - 5
server/src/modules/tts/edge-tts.provider.ts

@@ -120,12 +120,18 @@ export class EdgeTtsProvider implements ITtsProvider {
       '--write-media', finalPath,
     ];
 
-    // 语速映射:speed 0.5~2.0 → rate -50%~+100%
-    // 注意:使用 --rate=<value> 格式而非 --rate <value>,避免 shell 解析负值参数
+    // 语速策略:Edge TTS 的 --rate 是后处理时间拉伸(与 HTML5 audio.playbackRate / ffmpeg
+    // atempo 等价),听感上和"播放器减速"完全一样,没必要在服务端做一遍(会增加处理、
+    // 文件大小、调试复杂度)。所以 Edge TTS 路径下强制忽略 voiceParams.speed,永远按 1.0
+    // 生成;用户想要慢速,请直接用播放器 UI 上的倍速按钮。
+    //
+    // 注意:大模型 TTS(阿里云 Qwen-TTS Instruct / CosyVoice)走的是模型级慢速生成,
+    //     听感比后处理更好,那条路径保留 speed 参数(见 aliyun.provider.ts)。
     if (params.speed !== undefined && params.speed !== 1) {
-      const ratePercent = Math.round((params.speed - 1) * 100);
-      const sign = ratePercent > 0 ? '+' : '';
-      args.push(`--rate=${sign}${ratePercent}%`);
+      console.log(
+        `[EdgeTTS] 忽略用户/AI 设置的 speed=${params.speed},强制按 1.0 生成。` +
+        `如需慢速,请在播放器 UI 上调倍速(Edge TTS 的 --rate 与之等价)。`,
+      );
     }
 
     // 音调映射:pitch -500~500 → pitch -50Hz~+50Hz