diff --git a/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureTtsHelper.swift b/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureTtsHelper.swift index 2d08ca702..30dfd7464 100644 --- a/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureTtsHelper.swift +++ b/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureTtsHelper.swift @@ -264,74 +264,44 @@ public class AzureTtsHelper: NSObject, ITtsService { pendingTasks.removeAll() taskLock.unlock() - // 使用异步停止方法并等待完成 - let stopGroup = DispatchGroup() - stopGroup.enter() - - synthesisQueue.async { [weak self] in - guard let self = self else { - stopGroup.leave() - return - } + do { + print("liwei-------------停止语音合成播放") + try self.synthesizer?.stopSpeaking() + self.notifyEvent(eventType: .synthesisCanceled) + if !micCapture.isCapturing{ + // 停止时设置音频会话为非活跃状态 + // try AVAudioSession.sharedInstance().setActive(false) + } + + print("音频会话已设置为非活跃状态") + } catch { + os_log("停止语音合成失败: %{public}@", log: self.log, type: .error, error.localizedDescription) + self.notifyEvent(eventType: .error, params: [ + "errorCode": "STOP_FAILED", + "errorMessage": error.localizedDescription + ]) + } + + synthesisQueue.async { do { - print("liwei-------------停止语音合成播放") - // 使用同步停止方法 - if let synthesizer = self.synthesizer { - try synthesizer.stopSpeaking() - } - - self.notifyEvent(eventType: .synthesisCanceled) - - if !self.micCapture.isCapturing { - // 停止时设置音频会话为非活跃状态 - // try AVAudioSession.sharedInstance().setActive(false) - } - - print("音频会话已设置为非活跃状态") - - // 等待所有合成操作完成后再重新创建 - self.synthesisGroup.wait() - - // 安全地销毁和重新创建合成器 self.synthesizer = nil try self.recreateSynthesizer() - - } catch { - os_log("停止语音合成失败: %{public}@", log: self.log, type: .error, error.localizedDescription) - self.notifyEvent(eventType: .error, params: [ - "errorCode": "STOP_FAILED", - "errorMessage": error.localizedDescription - ]) + }catch { + os_log("重置语音合成失败: %{public}@", log: self.log, type: .error, error.localizedDescription) } - - stopGroup.leave() } - // 等待停止操作完成 - stopGroup.wait() return true } /** * 释放资源 */ public func dispose() { - // 先停止所有操作 _ = stop() - - // 等待所有异步操作完成 synthesisGroup.wait() synthesisQueue.sync { - // 确保合成器完全停止后再销毁 - if let synthesizer = self.synthesizer { - do { - try synthesizer.stopSpeaking() - } catch { - os_log("停止合成器失败: %{public}@", log: self.log, type: .error, error.localizedDescription) - } - } - synthesizer = nil speechConfig = nil customAudioOutputStream = nil @@ -471,45 +441,29 @@ public class AzureTtsHelper: NSObject, ITtsService { /** * 执行语音合成 */ - private func performSynthesis(sessionid: String, text: String) { + private func performSynthesis(sessionid:String,text: String) { if (self.sessionid != sessionid) { return } - - // 进入合成组 - synthesisGroup.enter() - speaking = true +// lastSpokenText = text // 生成SSML let ssml = generateOptimizedSsml(text) do { if (self.sessionid != sessionid) { - synthesisGroup.leave() return } os_log("开始合成: %{public}@", log: log, type: .debug, ssml) + let result = try synthesizer?.startSpeakingSsml(ssml) - // 使用同步合成方法 - if let synthesizer = self.synthesizer { - do { - try synthesizer.startSpeakingSsml(ssml) - os_log("合成开始成功", log: self.log, type: .debug) - } catch { - self.speaking = false - os_log("合成失败: %{public}@", log: self.log, type: .error, error.localizedDescription) - self.notifyEvent(eventType: .error, params: [ - "errorCode": "SYNTHESIS_FAILED", - "errorMessage": error.localizedDescription - ]) - } + if let result = result { + os_log("合成完成,结果: %{public}@", log: log, type: .debug, String(describing: result.reason)) } - } catch { speaking = false + // 减少待处理文本计数 pendingTextCount = max(0, pendingTextCount - text.count) - synthesisGroup.leave() - os_log("语音合成失败: %{public}@", log: log, type: .error, error.localizedDescription) notifyEvent(eventType: .error, params: [ "errorCode": "SYNTHESIS_FAILED",