这很愚蠢,但我无法正常工作。
我想在电话说话之前停止录音。没有数据正在传递。
let words = "Hello world"
let utt = AVSpeechUtterance(string:words)
stopRecordingWithCompletion() {
voice.speak(utt)
}
func stopRecordinWithCompletion(closure: () -> Void) {
recognitionRequest?.endAudio()
recognitionRequest = nil
recognitionTask?.cancel()
recognitionTask = nil
let inputNode = audioEngine.inputNode
let bus = 0
inputNode?.removeTap(onBus: bus)
self.audioEngine.stop()
closure()
}
我在做什么错了?
答案 0 :(得分:1)
您当前的方法并不十分理想。
首先,AVSpeechSynthesizer提供了一个代表,您可以监视其更改,包括何时讲话。
speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:)
只需注意这一点,然后调用stop函数即可。因为它是synchronous函数调用,所以不需要关闭。
总结:
AVSpeechSynthesizerDelegate
speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:)
stopRecording()
函数委托设置示例:
extension YourClassHere: AVSpeechSynthesizerDelegate {
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer,
willSpeakRangeOfSpeechString characterRange: NSRange,
utterance: AVSpeechUtterance) {
stopRecording()
}
}