我正在尝试让用户讲话并弄清用户说的正确话。我读了20篇关于语音识别的不同文章,而且几乎都是一样的。它持续聆听用户1分钟或更长时间。当用户停止讲话时,我希望它停止识别。我想听一个用户说的一个词/几个词。有什么限制用户说话的时间吗?
我的代码块:
func recordAndRecognizeSpeech(){
if recognitionTask != nil {
recognitionTask?.cancel()
recognitionTask = nil
}
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(.record, mode: .measurement, options: .duckOthers)
try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
} catch {
print("audioSession properties weren't set because of an error.")
}
recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
let node = audioEngine.inputNode
guard let request = recognitionRequest else {
fatalError("Unable to create an SFSpeechAudioBufferRecognitionRequest object")
}
//request.shouldReportPartialResults = true
// Setting requiresOnDeviceRecognition to false would use the Apple Cloud for speech recognition.
if speechRecognizer?.supportsOnDeviceRecognition ?? false{
request.requiresOnDeviceRecognition = true
}
guard let myRecognizer = SFSpeechRecognizer() else {
// A recognizer is not supported for the current locale
return
}
if !myRecognizer.isAvailable {
// A recognizer is not available now
return
}
recognitionTask = speechRecognizer?.recognitionTask(with: request, resultHandler: { result, error in
if let result = result {
DispatchQueue.main.async {
let bestString = result.bestTranscription.formattedString
print(bestString)
}
} else if let error = error {
print(error)
self.audioEngine.stop()
node.removeTap(onBus: 0)
self.recognitionRequest = nil
self.recognitionTask = nil
self.speakButton.isEnabled = true
}
})
let recordingFormat = node.outputFormat(forBus: 0)
node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat){buffer,_ in
self.recognitionRequest!.append(buffer)
}
audioEngine.prepare()
do {
try audioEngine.start()
} catch {
return print(error)
}
}
答案 0 :(得分:0)
您可以检查声音输入的功率,如果声音达到最小值,则启动计时器(如3秒),然后在计时器启动后停止。
var recorder: AVAudioRecorder?
recorder.updateMeters()
let dB = recorder.averagePower(forChannel: 0)