From 4ecfbd134e08e880ea45b03807b8638e8aec3e7d Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Sun, 18 Jan 2026 00:01:25 +0800 Subject: [PATCH] =?UTF-8?q?fix(azure=5Fspeech):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=B5=81=E5=BC=8F=E6=92=AD=E6=94=BE=E6=97=B6speaking=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=9C=AA=E6=AD=A3=E7=A1=AE=E6=9B=B4=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 确保在流式播放模式下speaking状态在适当的时候更新,避免状态不一致。同时优化了sessionid为空时的处理逻辑。 --- .../Sources/azure_speech/AzureTtsHelper.swift | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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 ae14dab6d..664d5ea9b 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 @@ -596,8 +596,10 @@ public class AzureTtsHelper: NSObject, ITtsService, AVAudioPlayerDelegate { synthesizer?.addSynthesisCompletedEventHandler { [weak self] _, _ in guard let self = self else { return } - self.speaking = false if self.suppressStreamPlayback { return } + if !self.isUsingPushStreamCapture { + self.speaking = false + } // 将当前合成的音频加入播放队列 if !self.currentSynthesisBuffer.isEmpty { os_log("调用链: 合成完成 入队播放 数据长度=%{public}dB session=%{public}@", log: self.log, type: .info, self.currentSynthesisBuffer.count, self.sessionid) @@ -621,11 +623,13 @@ public class AzureTtsHelper: NSObject, ITtsService, AVAudioPlayerDelegate { synthesizer?.addSynthesisCanceledEventHandler { [weak self] _, event in guard let self = self else { return } - self.speaking = false // 减少待处理文本计数 self.pendingTextCount = max(0, self.pendingTextCount - 1) if self.suppressStreamPlayback { return } + if !self.isUsingPushStreamCapture { + self.speaking = false + } if self.isUsingPushStreamCapture { self.audioPlaybackQueue.async { @@ -664,11 +668,11 @@ public class AzureTtsHelper: NSObject, ITtsService, AVAudioPlayerDelegate { */ private func handleSynthesizedAudioChunk(_ data: Data) { if suppressStreamPlayback { return } - if !speaking { return } + if sessionid.isEmpty { return } notifyAudioData(data) guard isUsingPushStreamCapture else { return } audioPlaybackQueue.async { - if !self.speaking { return } + if self.sessionid.isEmpty { return } let pcm = self.stripWavHeaderIfNeeded(data) if !pcm.isEmpty { self.pcmPendingData.append(pcm) @@ -767,6 +771,7 @@ public class AzureTtsHelper: NSObject, ITtsService, AVAudioPlayerDelegate { */ private func checkStreamPlaybackCompletedIfNeeded() { if activeStreamSynthesisCount == 0, pcmPendingData.isEmpty, scheduledBufferCount == 0 { + speaking = false hasNotifiedPlaybackStartedForStream = false os_log("调用链: 流式播放完成 session=%{public}@", log: log, type: .info, sessionid) notifyEvent(eventType: .playbackCompleted)