gpt4 book ai didi

ios - 在 AVSpeechSynthesis 和 AVAudioSession 之间交替

转载 作者:行者123 更新时间:2023-11-28 18:47:28 24 4
gpt4 key购买 nike

我有一个在说话(使用 AVSpeechSynthesizer)和聆听(使用 AVAudioSession)之间来回切换的应用程序。

如果我让说话自然地停止(它的短语结束),然后开始听,一切都会很好。但是,如果我允许用​​户打断说话,那么在(确切地说!)连续 4 次打断之后,语音合成器将停止并出现错误 Deactivating an audio session that has running I/O

这是我的AVSpeechSynthesizer 方法:

func speakMessage(theMessage: String) {
let synth = AVSpeechSynthesizer()
let utterance = AVSpeechUtterance(string: theMessage)
utterance.voice = AVSpeechSynthesisVoice(language: "en-US")
utterance.rate = 0.52

synth.speak(utterance)
}

func stopSpeaking() {
let synth = AVSpeechSynthesizer()
if synth.isSpeaking {
synth.stopSpeaking(at: .immediate)
let utterance = AVSpeechUtterance(string: "")
synth.speak(utterance)
synth.stopSpeaking(at: .immediate)
}
}

这里是AVAudioSession方法,一直到报错的地方:

private func startRecording() throws {

// Cancel the previous task if it's running.
if let recognitionTask = recognitionTask {
recognitionTask.cancel()
self.recognitionTask = nil
}

let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(AVAudioSessionCategoryRecord)
try audioSession.setActive(true, with: .notifyOthersOnDeactivation)

recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
...

我假设调用 try audioSession.setActive(true .. 是错误发生的地方 - AVAudioSession 首先尝试停用,但文档说

Deactivating your session will fail if any associated audio objects (such as queues, converters, players, or recorders) are currently running

当用户中断语音合成时,我如何安全地停用 Audio Session ?

最佳答案

我今天遇到了这个问题,经过一些试验后,我发现在停止合成器之前暂停它可以停用 Audio Session 而不会出错。所以,这就是我的 stopSpeaking() 方法的样子:

var synthesizer = AVSpeechSynthesizer()

....

func stopSpeaking() {
synthesizer.pauseSpeaking(at: .immediate)
synthesizer.stopSpeaking(at: .immediate)
}

顺便说一句,只有在 .immediate 边界调用 stopSpeaking(at:) 时才会发生错误。如果该方法将 .word 作为参数,至少在我的情况下,停用 Audio Session 不会导致错误。

关于ios - 在 AVSpeechSynthesis 和 AVAudioSession 之间交替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48722346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com