issue: Speech Playback Speed is ignored by Read Aloud and response auto-playback

当 Open WebUI 使用服务端 TTS 引擎(例如 OpenAI 兼容接口指向 Kokoro-FastAPI)时,Settings > Audio > Speech Playback Speed 会被 Read Aloud 和回复自动播放忽略,所有句子都按 1x 播放。优先排查音频队列在给每个

快速结论:当 Open WebUI 使用服务端 TTS 引擎(例如 OpenAI 兼容接口指向 Kokoro-FastAPI)时,Settings > Audio > Speech Playback Speed 会被 Read Aloud 和回复自动播放忽略,所有句子都按 1x 播放。优先排查音频队列在给每个句子重新赋值 src 后是否重置了 playbackRate。

适用环境:Open WebUI v0.11.4(8bd8b4fa)和 dev 分支(7e6c8d7b)的已发布镜像;Docker 安装方式;服务端 Ubuntu 24.04.4 LTS(Docker 29.7.2);客户端 Fedora 44 / Firefox 155。TTS 使用 OpenAI 引擎指向 Kokoro-FastAPI,未涉及 Ollama。另在 Ubuntu 上的 Firefox 和 Chrome 复现,并在 iPhone 13 Pro(iOS 26.4)测试 Voice Mode 未受影响。

最快修复方案:暂无确认的一步修复方案(Issue 中给出了代码级修复思路,但未说明已合并到发布版本)。

注意事项:Issue 中的修复仅作为代码补丁建议提出:在 setPlaybackRate 中同时设置 defaultPlaybackRate。该方案未在正文中标注为官方已发布修复,实际以对应 PR/版本为准。另有用户侧 workaround:通过 Admin > Audio > Additional Parameters 传 {"speed": 1.1} 给 Kokoro-FastAPI,但它是全局生效的,且 TTS 缓存键不包含这些参数,改动前已缓存的句子仍保持旧速度。

问题场景

用户在 Open WebUI 中把 Text-to-Speech Engine 设为 OpenAI(API Base URL 指向 Kokoro-FastAPI),然后在 Settings > Audio 将 Speech Playback Speed 设为 2x 并保存。点击回复下方的 Read Aloud,或开启 Auto-Playback Response 后发送消息,语音仍以正常速度(1x)播放。Issue 报告称设置本身已保存——用户设置里的 ui.audio.tts.playbackRate 读到 2,但该值没有传递到实际播放环节。该问题在 v0.11.4 和 dev 分支的已发布镜像上均可复现,设为 5x 也无效果。

报错原文

issue: Speech Playback Speed is ignored by Read Aloud and response auto-playback

Settings > Audio > Speech Playback Speed has no effect on Read Aloud or response auto-playback with a server TTS engine. Every sentence plays at 1x.

原因分析

最可能的原因是音频队列在切换句子时重置了播放速率。Issue 分析指出:src/lib/utils/audio.ts 中的 AudioQueue.setPlaybackRate 只设置了一次 audio.playbackRate,随后 next() 会为队列中每个句子重新赋值 audio.src。给媒体元素赋值 src 会触发媒体元素加载算法,该算法会把 playbackRate 重置为 defaultPlaybackRate;而代码从未设置 defaultPlaybackRate,因此它保持默认值 1。Issue 报告者推测此问题随队列重构(1cc3493d)引入,因为在那之前每个片段都是独立的 new Audio(blobUrl),且在构造后才设置速率。CallOverlay.svelte 是在赋值 src 之后才设置 playbackRate,所以推测通话模式不受影响,但报告者未测试。

环境排查

  • 确认 Open WebUI 版本:Issue 中复现于 v0.11.4(8bd8b4fa)和 dev(7e6c8d7b)。
  • 确认安装方式:Docker。
  • 确认服务端操作系统:Ubuntu 24.04.4 LTS,Docker 29.7.2。
  • 确认客户端浏览器:Issue 中为 Fedora 44 / Firefox 155,另有用户在 Ubuntu 上的 Firefox 和 Chrome 复现。
  • 确认 TTS 配置:Admin Panel > Settings > Audio 中 Text-to-Speech Engine 为 OpenAI,API Base URL 指向 Kokoro-FastAPI,TTS Model 为 kokoro。
  • 确认 Settings > Audio 中 Speech Playback Speed 已设为 2x 或更高并保存。
  • 确认问题范围:Read Aloud 和回复自动播放均受影响;Voice Mode 在同一 2x 设置下不受影响。
  • Issue 未涉及 Ollama,无需检查其版本。

解决步骤

  1. 先确认用户设置中 ui.audio.tts.playbackRate 确实写入了目标值(Issue 中读到 2),以排除设置未保存的情况。
  2. 按 Issue 给出的思路,在 src/lib/utils/audio.ts 的 setPlaybackRate 中同时设置 defaultPlaybackRate 和 playbackRate:
setPlaybackRate(rate: number) {
	this.audio.defaultPlaybackRate = rate;
	this.audio.playbackRate = rate;
}
  1. 若不修改代码,可优先尝试用户侧的 workaround:在 Admin > Audio > Additional Parameters 中为 Kokoro-FastAPI 传入 {"speed": 1.1},让服务端以指定速度合成语音。
  2. 注意 workaround 的缓存问题:TTS 缓存键不包含 Additional Parameters,改动前已缓存的句子仍会保持旧速度,需要让这些句子重新生成。

验证方法

按 Issue 中的测量方式,在播放时用 currentTime 对比墙钟时间,每隔 250 ms 采样一次。未修复时,playbackRate 在播放期间为 1,实测每句速度为 0.97x–1.01x(v0.11.4)和 0.96x–1.01x(dev)。加上 defaultPlaybackRate 后,playbackRate 在播放期间为 2,实测速度为 1.81x–1.94x;报告者推测未完全达到 2x 是由于对 1.3–2.5 秒句子采用 250 ms 采样所致。也可以在浏览器控制台用最小复现确认媒体元素行为:

const a = new Audio();
a.playbackRate = 2;
a.src = 'a.mp3';
a.playbackRate; // 1

若先设置 a.defaultPlaybackRate = 2,或在赋值 src 之后再次设置 playbackRate,则值会保持为 2。

参考来源

open-webui/open-webui #31870

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 27353

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注