在 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
protocol 的 didStart
方法检测开头,该方法将提供相关语句。
此外,如果您想知道发声的确切位置,请使用AVSpeechSynthesizerDelegate
协议的willSpeakRangeOfSpeechString
。
All these elements 应该可以帮助您根据需要从 AVSpeech 和 AVUtterance 检测正在进行的语音。
我知道你可以使用委托方法来判断 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
protocol 的 didStart
方法检测开头,该方法将提供相关语句。
此外,如果您想知道发声的确切位置,请使用AVSpeechSynthesizerDelegate
协议的willSpeakRangeOfSpeechString
。
All these elements 应该可以帮助您根据需要从 AVSpeech 和 AVUtterance 检测正在进行的语音。