gpt4 book ai didi

ios - 在Swift3中停止识别而无需停止词

转载 作者:行者123 更新时间:2023-12-01 16:08:52 27 4
gpt4 key购买 nike

我正在尝试简化Textview中语音框架的使用。我可以通过基于输入textview的代码,启动代码或其他操作轻松地启动语音识别过程。但是,我也想在没有用户触摸的情况下结束语音识别。我无法在Speech框架中找到任何东西来指示有可用的方法来执行此操作。我通过定义一个单词作为停止抄写的触发器,然后从抄录中删除该单词的方式,精心设计了一种方法。它确实有效,但是用户当然不能说这个单词。有没有更好的方法来处理这个概念? iOS 10,Swift 3,Xcode 8.2.1

这是识别任务的代码子集:

private var bufferedString = String()
private var stopWord = "myStopWord"

recognitionRequest.shouldReportPartialResults = true
let startText = self.sayTextView.text
bufferedString = ""

recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
var finished = false

if let result = result {

self.bufferedString = startText! + result.bestTranscription.formattedString
self.sayTextView.text = self.bufferedString
finished = result.isFinal

}//if let result

//for testing
self.stopWord = "Relationship"
//for testing

if self.bufferedString.lowercased().contains(self.stopWord.lowercased()) {
print("buffered string contains \(self.stopWord)")

if let stopWordRange = self.bufferedString.lowercased().range(of: self.stopWord.lowercased()) {
self.bufferedString.replaceSubrange(stopWordRange, with: "")
self.sayTextView.text = self.bufferedString
}//if let

self.stopRecording(self)

}//if contains - look for stopWord

if error != nil || finished {

self.audioEngine.stop()
inputNode.removeTap(onBus: 0)

self.recognitionRequest = nil
self.recognitionTask = nil
self.startRecordingButton.isEnabled = true

}//if error
})//recognitionTask resultHandler

最佳答案

当用户停止按预期讲话时,isFinal标志似乎没有变为真。我猜这是Apple的通缉行为,因为“用户停止通话”事件是未定义的事件。

我相信实现目标的最简单方法是:

  • 您必须建立一个“沉默间隔”,这意味着如果用户不讲话的时间长于您停止讲话的间隔(即2秒)。
  • 在音频 session 开始时创建一个计时器:

  • var timer = NSTimer.scheduledTimerWithTimeInterval(2,目标:自我,选择器:“didFinishTalk”,userInfo:无,重复:false)

    当您在 recognitionTask中获得新转录时,
  • 无效并重新启动计时器

    timer.invalidate()
    timer = NSTimer.scheduledTimerWithTimeInterval(2,目标:自我,选择器:“didFinishTalk”,userInfo:无,重复:false)
  • (如果计时器到期),这意味着用户从2秒钟开始不讲话。您可以安全地停止音频 session 并退出
  • 关于ios - 在Swift3中停止识别而无需停止词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42262491/

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