Browse Source

9.1修复唤醒异常问题

weicu
fdp 1 year ago
parent
commit
a0eb6acebe
  1. 3
      local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift
  2. 131
      local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureAsrHelper.swift

3
local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift

@ -354,6 +354,7 @@ class AgentServiceImpl: NSObject {
if self.isRecognizing && !self.isSpeaking && !self.isAiStreaming {
os_log("空闲检测触发自动停止,模式: %{public}@", log: self.logger, type: .info, self.currentRecognitionMode)
BleService.shared.closeCodec()
self.stopRecognition()
self.sendEvent(name: "auto_stop", data: [
"reason": "idle_timeout",
@ -471,7 +472,7 @@ class AgentServiceImpl: NSObject {
MusicService.shared.resume()
}
//BleService.shared.closeCodec()
// 重置识别模式
currentRecognitionMode = "normal"

131
local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureAsrHelper.swift

@ -264,13 +264,13 @@ public class AzureAsrHelper: NSObject {
completion(false)
return
}
print("startAudioRecordAsync\(_isContinuousRecognitionActive)")
// 二次校验:stop 可能已发生,确认仍需启动
guard self._isContinuousRecognitionActive else {
os_log("已收到停止请求,取消启动音频录制", log: self.log, type: .info)
completion(false)
return
}
// print("startAudioRecordAsync\(_isContinuousRecognitionActive)")
// // 二次校验:stop 可能已发生,确认仍需启动
// guard self._isContinuousRecognitionActive else {
// os_log("已收到停止请求,取消启动音频录制", log: self.log, type: .info)
// completion(false)
// return
// }
os_log("开始异步启动音频录制", log: self.log, type: .info)
@ -385,74 +385,75 @@ public class AzureAsrHelper: NSObject {
* 修复点:在音频启动成功后的闭包中,先判断 _isContinuousRecognitionActive 是否仍然为 true,
* 若 stop 已发生则直接跳过 recognizer 的启动,避免“已停止但仍启动识别”的情况。
*/
public func startContinuousRecognition(
audioSourceType: AudioSourceType = .microphone,
audioDataCallback: SimpleAudioReceiver.AudioDataCallback? = nil
) -> Bool {
guard speechConfig != nil else {
print("语音服务未初始化")
return false
}
// 检查网络状态
if !checkNetworkStatus() {
return false
}
if _isContinuousRecognitionActive {
print("连续识别已在进行中")
return true
public func startContinuousRecognition(
audioSourceType: AudioSourceType = .microphone,
audioDataCallback: SimpleAudioReceiver.AudioDataCallback? = nil
) -> Bool {
guard speechConfig != nil else {
print("语音服务未初始化")
return false
}
// 检查网络状态
if !checkNetworkStatus() {
return false
}
if _isContinuousRecognitionActive {
print("连续识别已在进行中")
return true
}
// 先取消任何挂起的启动任务
cancelPendingAudioStart()
// 延迟设置状态,直到音频启动任务真正开始执行
self.audioSourceType = audioSourceType
print("startContinuousRecognition:准备启动")
do {
if recognizer == nil {
// 检查continuousCallback是否为空,只有在不为空时才设置事件监听器
if let callback = self.continuousCallback {
setupEventListeners(callback: callback)
}
}
// 先取消任何挂起的启动任务
cancelPendingAudioStart()
print("startContinuousRecognition:\(audioSourceType)")
// 移除这里的状态设置,等音频启动成功后再设置
// self._isContinuousRecognitionActive = true
// 延迟设置状态,直到音频启动任务真正开始执行
self.audioSourceType = audioSourceType
print("startContinuousRecognition:准备启动")
do {
if recognizer == nil {
// 检查continuousCallback是否为空,只有在不为空时才设置事件监听器
if let callback = self.continuousCallback {
setupEventListeners(callback: callback)
}
}
// 异步启动音频处理
startAudioRecordAsync(audioSourceType: audioSourceType, audioDataCallback: audioDataCallback) { [weak self] (success: Bool) in
guard let self = self else { return }
print("startContinuousRecognition:\(audioSourceType)")
// 只有在音频启动成功后才设置状态为 true
self._isContinuousRecognitionActive = true
// 异步启动音频处理
startAudioRecordAsync(audioSourceType: audioSourceType, audioDataCallback: audioDataCallback) { [weak self] (success: Bool) in
guard let self = self else { return }
if success {
// 只有在音频启动成功后才设置状态为 true
self._isContinuousRecognitionActive = true
print("startContinuousRecognition:\(self._isContinuousRecognitionActive)")
if success {
// 只有在音频启动成功后才设置状态为 true
self._isContinuousRecognitionActive = true
print("startContinuousRecognition:\(self._isContinuousRecognitionActive)")
// 启动语音识别
do {
try self.recognizer?.startContinuousRecognition()
os_log("连续识别已启动,音频源: %{public}@", log: self.log, type: .info, audioSourceType == .microphone ? "麦克风" : "外部")
} catch {
os_log("启动连续识别失败: %{public}@", log: self.log, type: .error, error.localizedDescription)
self.stopContinuousRecognition()
self._isContinuousRecognitionActive = false
}
} else {
os_log("音频启动失败,无法开始识别", log: self.log, type: .error)
// 启动语音识别
do {
try self.recognizer?.startContinuousRecognition()
os_log("连续识别已启动,音频源: %{public}@", log: self.log, type: .info, audioSourceType == .microphone ? "麦克风" : "外部")
} catch {
os_log("启动连续识别失败: %{public}@", log: self.log, type: .error, error.localizedDescription)
self.stopContinuousRecognition()
self._isContinuousRecognitionActive = false
}
} else {
os_log("音频启动失败,无法开始识别", log: self.log, type: .error)
self._isContinuousRecognitionActive = false
}
return true
} catch {
stopContinuousRecognition()
_isContinuousRecognitionActive = false
return false
}
return true
} catch {
stopContinuousRecognition()
_isContinuousRecognitionActive = false
return false
}
}

Loading…
Cancel
Save