在 Swift 中检测来自 AVSpeech 和 AVUtterance 的正在进行的语音

Detect ongoing speech from AVSpeech and AVUtterance in Swift

我知道你可以使用委托方法来判断 AV 语音何时结束

 extension MyViewController: AVSpeechSynthesizerDelegate {

    func speechSynthesizer(synthesizer: AVSpeechSynthesizer, didFinishSpeechUtterance utterance: AVSpeechUtterance) {
            print("speech finished")
        }

    }

但是您如何判断语音是否正在进行并且尚未结束?

现在,我开始演讲

voice.speak(utt)
//do something

我想在对方说话的时候做点什么before他们说完了。仅仅在 voice.speak(utt) 下面放一行 do something 似乎不起作用。我认为这是由于竞争条件。我不能确定它会在语音被触发后立即触发,并且在话语完成后委托方法触发之前触发。

完成集团无济于事,因为我想在话语完成之前做一些事情。那么我怎样才能在话语发生时做某事,换句话说,在话语开始的准确时刻开始做某事?

how can you tell if speech is ongoing...

从 AVSpeechSynthesizer 实例的 isSpeaking 方法检索指示合成器是否正在说话的布尔值。

...and has not yet finished?

使用 AVSpeechSynthesizerDelegate protocoldidStart 方法检测开头,该方法将提供相关语句。

此外,如果您想知道发声的确切位置,请使用AVSpeechSynthesizerDelegate协议的willSpeakRangeOfSpeechString

All these elements 应该可以帮助您根据需要从 AVSpeech 和 AVUtterance 检测正在进行的语音。