gpt4 book ai didi

ios - 每次结果后清除 SFSpeechAudioBufferRecognitionRequest 的输入(Swift3)

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:37 29 4
gpt4 key购买 nike

我通过这个 appcoda tutorial 将语音集成到文本中.我面临的问题是我希望用户可以自己编写/编辑某些内容,但是 SFSpeechAudioBufferRecognitionRequest 没有考虑用户输入的内容。

在 SFSpeechAudioBufferRecognitionRequest 中发送用户键入的输入的方式是什么,或者在发送新请求之前清除 SFSpeechAudioBufferRecognitionRequest 输入参数的任何方式。

提前致谢。

最佳答案

这是我用来创建识别请求的内容:

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

isRecognizing = true
self.delegate?.recognitionStarted(sender: self)

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

recognitionRequest = SFSpeechAudioBufferRecognitionRequest()

guard let inputNode = audioEngine.inputNode else {
print("there was an error in audioEngine.inputNode")
fatalError("Audio engine has no input node")
}

guard let recognitionRequest = recognitionRequest else {
fatalError("Unable to create a SFSpeechAudioBufferRecognitionRequest object")
}

// Configure request so that results are returned before audio recording is finished
recognitionRequest.shouldReportPartialResults = true

// A recognition task represents a speech recognition session.
// We keep a reference to the task so that it can be cancelled.
recognitionTask = recognizer.recognitionTask(with: recognitionRequest) { result, error in

func finalizeResult() {
self.audioEngine.stop()
inputNode.removeTap(onBus: 0)
self.recognitionRequest = nil
self.recognitionTask = nil
}

guard error == nil else {
finalizeResult()
return
}

if !(result?.isFinal)! {

guard self.isRecognizing else {
return
}

// process partial result
self.processRecognition(result: result)

} else {
finalizeResult()
}
}

let recordingFormat = inputNode.outputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in
self.recognitionRequest?.append(buffer)
}

audioEngine.prepare()

do {
try audioEngine.start()
} catch let error as NSError {
print("audio engine start error=\(error)")
}
}

要随时取消或停止它,我使用这些方法:

@objc func stopRecording() {
isRecognizing = false
audioEngine.stop()
recognitionRequest?.endAudio()
self.delegate?.recognitionFinished()
}

func cancelRecording() {
isRecognizing = false
audioEngine.stop()
recognitionTask?.cancel()
self.delegate?.recognitionFinished()
}

我会设置一个按钮来触发语音识别并将其绑定(bind)到 recordSpeech()。然后设置一个按钮并将其绑定(bind)到 stopRecording()。当用户停止请求时,result?.isfinal 将为真,您知道这是第一个输入的最终文本。然后,用户可以再次使用语音输入来输入第二组语音。

我的大部分代码来自 2016 年关于语音识别的 WWDC session ,您可以在这里找到:

Transcript

Video

关于ios - 每次结果后清除 SFSpeechAudioBufferRecognitionRequest 的输入(Swift3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45681853/

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