Skip to content

[Feature] DashScope 播放中切换音色即时生效(当前需等到下一页) #370

@chy5301

Description

@chy5301

Type

Feature / Enhancement

需求描述

桌面端 DashScope 朗读正在播放(未暂停)时切换音色(dashscopeVoice),新音色不会即时生效:当前这一页(几句)会用旧音色播完,要等喂入下一页才换成新音色。希望切音色后能尽快生效(例如从当前句起用新音色)。

说明:这是既有行为,并非某次修复引入的回归。本 issue 针对的是「不暂停、播放中」切音色的体验。

可核实的代码事实(仅供定位)

两层原因叠加导致延迟到下一页才生效:

  1. 闭包 config:DashScopeTTSPlayer.speak(text, config)(packages/core/src/tts/tts-players.ts:154)把 config 闭包捕获,整轮 for 循环里每句的 voice 都用这一份(:248 voice: config.dashscopeVoice)。正在进行的这轮 speak 感知不到之后的 updateConfig
  2. 按页分批喂入:阅读器一次只喂「一页」的句子给 TTS(packages/app/src/components/reader/ReaderView.tsx:2054 ttsPlay(当前页 segments));当前页播完触发 onEnd → handleTTSPageEnd,再用最新 config 调一次 ttsPlay 喂下一页(约 :1942)。

没有任何「监听 dashscopeVoice 变化、在播放中主动重启/jumpToChunk」的逻辑——音色选择入口(FooterBar.tsx:252TTSPage.tsx:431TTSControls.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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions