3

我想您可以使用委托方法来判断 AV 语音何时结束

 extension MyViewController: AVSpeechSynthesizerDelegate {

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

    }

但是你怎么知道演讲是否正在进行并且还没有结束呢?

现在,我开始一些演讲

voice.speak(utt)
//do something

我想在对方before说完的时候做点什么。仅仅在下面放一条线voice.speak(utt)似乎不起作用。我认为这是由于比赛条件。我不能确定它会在语音被触发后以及在话语完成后委托方法触发之前触发。

完成块无济于事,因为我想在话语完成之前做一些事情。那么我如何在话语发生时做某事,换句话说,在话语开始的那一刻开始做某事?

4

1 回答 1

2

你怎么知道演讲是否正在进行......

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

……还没有完成?

借助将提供相关话语的协议didStart方法检测开头。AVSpeechSynthesizerDelegate

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

所有这些元素都应该可以帮助您根据需要检测来自 AVSpeech 和 AVUtterance的正在进行的语音。

于 2019-05-07T19:27:40.807 回答