diff --git a/app/src/main/java/com/xiaoqu/watch/service/manager/EdgeTtsManager.kt b/app/src/main/java/com/xiaoqu/watch/service/manager/EdgeTtsManager.kt index 23e9599..8faf576 100644 --- a/app/src/main/java/com/xiaoqu/watch/service/manager/EdgeTtsManager.kt +++ b/app/src/main/java/com/xiaoqu/watch/service/manager/EdgeTtsManager.kt @@ -80,6 +80,9 @@ class EdgeTtsManager @Inject constructor( /** 当前 MediaPlayer */ private var mediaPlayer: MediaPlayer? = null + /** 当前合成协程 Job(用于取消正在进行的请求) */ + private var synthesizeJob: kotlinx.coroutines.Job? = null + /** 是否正在播放 */ var isPlaying: Boolean = false private set @@ -99,10 +102,10 @@ class EdgeTtsManager @Inject constructor( fun speak(text: String, voice: String = VOICE_XIAOXIAO, onError: ((String) -> Unit)? = null) { if (text.isBlank()) return - // 停止当前播放 + // 停止当前播放和进行中的请求 stop() - CoroutineScope(Dispatchers.IO).launch { + synthesizeJob = CoroutineScope(Dispatchers.IO).launch { try { // 检查缓存 val cacheFile = getCacheFile(text, voice) @@ -129,8 +132,12 @@ class EdgeTtsManager @Inject constructor( } } - /** 停止播放 */ + /** 停止播放和进行中的合成请求 */ fun stop() { + // 取消正在进行的合成协程(含 WebSocket 请求) + synthesizeJob?.cancel() + synthesizeJob = null + // 停止音频播放 try { mediaPlayer?.apply { if (isPlaying) stop()