Type
Feature / Enhancement
需求描述
桌面端 DashScope 朗读正在播放(未暂停)时切换音色(dashscopeVoice),新音色不会即时生效:当前这一页(几句)会用旧音色播完,要等喂入下一页才换成新音色。希望切音色后能尽快生效(例如从当前句起用新音色)。
说明:这是既有行为,并非某次修复引入的回归。本 issue 针对的是「不暂停、播放中」切音色的体验。
可核实的代码事实(仅供定位)
两层原因叠加导致延迟到下一页才生效:
- 闭包 config:
DashScopeTTSPlayer.speak(text, config)(packages/core/src/tts/tts-players.ts:154)把 config 闭包捕获,整轮 for 循环里每句的 voice 都用这一份(:248 voice: config.dashscopeVoice)。正在进行的这轮 speak 感知不到之后的 updateConfig。
- 按页分批喂入:阅读器一次只喂「一页」的句子给 TTS(
packages/app/src/components/reader/ReaderView.tsx:2054 ttsPlay(当前页 segments));当前页播完触发 onEnd → handleTTSPageEnd,再用最新 config 调一次 ttsPlay 喂下一页(约 :1942)。
且没有任何「监听 dashscopeVoice 变化、在播放中主动重启/jumpToChunk」的逻辑——音色选择入口(FooterBar.tsx:252、TTSPage.tsx:431、TTSControls.tsx:157 等)都只调 updateConfig,无后续动作。
可能的修复方向(仅建议)
- 在 store 的
updateConfig 检测到「dashscopeVoice 变化 + 正在播放 + 引擎为 dashscope」时,触发 jumpToChunk(_sessionCurrentIndex),用新音色从当前句重读;
- 或在阅读器加一个监听
config.dashscopeVoice 的 effect,播放中变化时 stop+从当前句 replay。
- 取舍:会把当前句用新音色重读一次,并多一次 API 调用(DashScope 合成只取决于 voice)。可考虑做成可选/防抖,避免连续切音色时频繁重合成。
设备
- Platform: Desktop (Windows), Tauri
- App: v1.3.x
- Locale: zh-CN
- Engine: DashScope (qwen3-tts-flash)
Type
Feature / Enhancement
需求描述
桌面端 DashScope 朗读正在播放(未暂停)时切换音色(dashscopeVoice),新音色不会即时生效:当前这一页(几句)会用旧音色播完,要等喂入下一页才换成新音色。希望切音色后能尽快生效(例如从当前句起用新音色)。
可核实的代码事实(仅供定位)
两层原因叠加导致延迟到下一页才生效:
DashScopeTTSPlayer.speak(text, config)(packages/core/src/tts/tts-players.ts:154)把config闭包捕获,整轮for循环里每句的voice都用这一份(:248voice: config.dashscopeVoice)。正在进行的这轮 speak 感知不到之后的updateConfig。packages/app/src/components/reader/ReaderView.tsx:2054ttsPlay(当前页 segments));当前页播完触发onEnd → handleTTSPageEnd,再用最新 config 调一次ttsPlay喂下一页(约:1942)。且没有任何「监听
dashscopeVoice变化、在播放中主动重启/jumpToChunk」的逻辑——音色选择入口(FooterBar.tsx:252、TTSPage.tsx:431、TTSControls.tsx:157等)都只调updateConfig,无后续动作。可能的修复方向(仅建议)
updateConfig检测到「dashscopeVoice变化 + 正在播放 + 引擎为 dashscope」时,触发jumpToChunk(_sessionCurrentIndex),用新音色从当前句重读;config.dashscopeVoice的 effect,播放中变化时 stop+从当前句 replay。设备