每个结果后清除 SFSpeechAudioBufferRecognitionRequest 的输入 (Swift3)

2024-02-02

我通过这个将语音集成到文本中应用程序教程 http://www.appcoda.com/siri-speech-framework/。我面临的问题是我希望用户可以自己编写/编辑某些内容,但 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()
}

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

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

成绩单 http://devstreaming.apple.com/videos/wwdc/2016/509n1cnykqms19r9jyp/509/509_speech_recognition_api.pdf

Video https://developer.apple.com/videos/play/wwdc2016/509/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每个结果后清除 SFSpeechAudioBufferRecognitionRequest 的输入 (Swift3) 的相关文章

  • Swift 在调试和发布模式下的行为不同

    不确定这是否是 Swift XCode 或 Alamofire 的问题 但我认识到我的混合 Swift Objc 应用程序中不同地方的奇怪行为 它只发生在用 Swift 编写并使用闭包 网络的部分 这是发生这种情况的示例代码 Alamofi
  • Xcode 9 - 框架断点

    在 Xcode 7 和 8 中 我已经能够通过在也包含框架项目的 xcworkspace 中运行包含应用程序来调试我一直在开发的框架 如果我在框架中设置断点 它们就会在运行时被触发 在 Xcode 9 beta 6 中 情况不再如此 到目前
  • 导航栏隐藏在 SwiftUI 中不起作用

    我有三观 我想隐藏第三个视图中的导航栏 即使我给 navigationBarHidden true 导航栏正在显示 我找不到我哪里做错了 我已在下面附上我的代码和生成的屏幕截图 Xcode 版本 11 1 struct ContentVie
  • SKAudioNode 崩溃:AVAudioPlayerNode.mm:333:开始:所需条件为 false:_engine->IsRunning()

    我有一个简单的 SKAudioNode let backgroundSound SKAudioNode fileNamed backgroundSound mp3 我用来玩backgroundSound runAction SKAction
  • 在 swift 中发送自定义 HTTP 标头

    我设法从服务器获取 json 但现在我想通过 http 标头添加额外的安全性 这就是我的代码现在的样子 let urlPath http www xxxxxxxx com let url NSURL string urlPath let s
  • IBOutlet、实例变量和属性:最佳实践

    今天 我对有关声明 IBOutlet 和实例变量 管理它们 使用正确的访问器以及正确释放它们的最佳实践进行了各种研究 我已经差不多了 但我有一些小问题 我希望有人能够就最佳实践提出建议 我会将它们格式化为代码并注释问题 以便更容易理解 我排
  • 如何将 WKUIDelegate 实现到 SwiftUI WKWebView 中?

    我正在 Xcode v11 上创建一个 Web 应用程序 但在实现 WKUIDelegate 来显示 Javascript 警报并在 Web 应用程序上正确确认时遇到问题 我在 ContentView swift 上得到了一个非常简单的 w
  • 在覆盖 UIView 的右下角创建四分之一透明孔

    您好 我想在覆盖 UIView 的右下角创建一个四分之一透明孔 我可以使用下面的代码解决它 但它看起来不正确 因为我在视图之外创建了一个矩形 我尝试过的 implementation PartialTransparentView id in
  • 如何使用 swift 在 UITabBarController 中以编程方式添加选项卡?

    如何以编程方式从 UIViewController 扩展的任何类创建选项卡 class DashboardTabBarController UITabBarController override func viewDidLoad here
  • iOS 9 中可滑动的表格视图单元格

    我希望我的表格列表具有像 iOS 8 中那样的可滑动菜单 首次在 iOS 7 中引入 我找到了清晰的 Ray Wenderlich 指南 http www raywenderlich com 62435 make swipeable tab
  • 使用 RestKit 对象映射空响应

    感谢在这里帮忙 https stackoverflow com questions 9743155 restkit mapping with an array of complex objects在 RestKit 邮件列表上 我已经能够解
  • iOS设备和iPhone模拟器内存​​组织的差异

    我正在尝试使用 Xcode 4 3 3 和 iPhone 5 1 模拟器开发一个应用程序 当我在模拟器上运行这个应用程序时 我没有收到任何警告 并且它运行得很好 但是 当我尝试在 iOS 设备上执行此操作时 我收到一条警告消息 收到内存警告
  • IOS 8 无声推送通知在没有 Xcode 的情况下无法工作

    我正在尝试测试静默推送通知 我注意到当我的设备连接到 Xcode 时 我的 iPhone IOS 8 只能接收静默通知 当它被拔掉时 我在大约 5 10 次尝试中只能收到一次静默推送 这种情况只发生在 IOS 8 上 因为我有另一部手机正在
  • 我可以在 Swift 3 项目中使用 Swift 2.3 框架吗?

    在我的项目中 我将所有私有 swift 2 3 文件迁移到 swift 3 我想使用用 swift 2 3 编写的遗留框架 直到它们有 swift 3 版本 我尝试添加 使用旧版 Swift 版本 是 清除 构建我的项目 但我仍然遇到一些麻
  • 如何跟踪 SwiftUI 应用程序中的所有触摸

    我正在尝试在 SwiftUI 应用程序中实现锁屏 我需要跟踪每个事件才能重新启动锁定计时器 在 UIKit 应用程序中 我使用了这种方法 重写 UIApplication 它允许了解应用程序中的任何事件 override func send
  • NSAttributedString 的 AutoLayout 行高计算错误

    我的应用程序从 API 中提取 HTML 将其转换为NSAttributedString 为了允许可点击的链接 并将其写入自动布局表中的一行 问题是 每当我调用这种类型的单元格时 高度都会被错误计算并且内容会被截断 我尝试了不同的行高计算实
  • 未安装 Apple 的全球开发者关系 (WWDR) 中间证书

    我今天无法通过 Appcelerator Titanium 发布我的应用程序 AdHoc 我开始收到此错误 错误 未安装 Apple 的全球开发者关系 WWDR 中间证书 错误 这将阻止您为 iOS 设备构建应用程序或用于分发的软件包 我上
  • 如何让 Chrome Cast 在 iOS 后台运行?

    我有一个简单的问题 当您进入 iPhone 的主屏幕并且不退出应用程序时 chrome Cast 设备会停止在屏幕上播放视频 当应用程序在后台运行时 我如何才能保持播放状态 如果您有一个视频应用程序并且它在投射设备中运行 您可能需要以下行为
  • 将 .p12 证书存储在钥匙串中以供稍后使用

    我正在尝试按照 Apple 文档处理此处的客户端 p12 证书 https developer apple com library ios documentation Security Conceptual CertKeyTrustProg
  • 有没有办法从 Instruments (Xcode) 的命令行实例中删除授权提示?

    我目前正在通过 bash 脚本使用 Instruments 来启动命令行界面以启动自动化插件的运行 在 4 2 中 这工作得很好 但是随着升级到 Xcode 4 3 我现在被提示需要授权用户 分析其他进程 即使授予了正确的凭据 也不会真正对

随机推荐

  • 对于方案中的每个和地图

    这两个功能在方案上有什么区别吗 我正在使用 Dr Racket R5RS 语言制作一个模拟器游戏 我无法决定哪个更好 for each从左到右计算列表元素上的给定函数 并丢弃函数的返回值 它非常适合对列表中的每个元素进行副作用操作 map以
  • Java中的构造函数继承

    您能告诉我以下代码中的问题吗 class boxdemo1 public static void main String args boxweight weightbox new boxweight 2 3 5 4 System out p
  • 如何在 Windows 命令行上使用 Unicode 字符?

    我们有一个项目在团队基础服务器 https en wikipedia org wiki Azure DevOps Server TFS 中包含非英语字符 当尝试编写一些与构建相关的事情的脚本时 我们偶然发现了一个问题 我们无法通过 给命令行
  • 为 Github Pages 中托管的 Jekyll 博客设置自定义子域

    我创建了一个由 Jekyll 驱动的博客 并通过 GitHub Pages 托管它 现在 我想设置一个子域 blog example com 但无法使其工作 我添加了一个 CNAME 文件 其文本为 blog example com 我在我
  • 在 Windows 8.1 上安装 PHP 5.6 后 Apache 2.2 无法启动

    我正在 Windows 8 1 计算机上设置开发环境 我成功安装了Apache 2 2 并下载了php 5 6 3 Win32 VC11 x86 我在 httpd conf 的末尾添加了以下几行 PHPIniDir C PHP5 LoadM
  • c++ opencv图像不显示在boost线程内

    我正在开发c 我在那里使用的应用程序boost opencv 并创建 boost 线程并调用该线程内的函数 该函数已得到 opencv imread 我使用 cvLoadimage 检查过 但得到了相同的结果 但程序无法完成并且程序退出 请
  • KafkaConsumer 连接到错误的代理,因此无法消费

    我根据 Kafka 文档中的示例编写了一个小脚本 import org apache kafka clients consumer KafkaConsumer import org slf4j LoggerFactory import co
  • 如何在 Java 8 中生成给定长度的列表?

    我想通过调用方法 x 次来创建列表 或一般集合 在 Python 中 它会是这样的 self generated self generate for in range length 我尝试在 JDK 8 中编写类似的代码 this gene
  • PHP microtime 基准函数时间比较

    我目前正在使用这个函数来对一些 php 脚本进行基准测试 脚本获取执行所需的微时间 并将其写入服务器上的日志中 但我遇到的问题是我不知道什么是合适的时间 下面的脚本是我的一些时间 任何人都可以告诉我我想要在什么样的时间范围内吗 置于页面开头
  • Laravel 解决闭包的依赖关系

    Laravel 能够自动在控制器构造等中注入依赖项 例如 class Test public function construct Request request App make Test 控制器的构造函数将接收适当的请求外观 有没有办法
  • UIButton 接触 IBAction 导致 EXC_BAD_ACCESS 与 ARC

    StackOverflow 上有一些问题 其中用户遇到了与我相同的问题 然而 他们的解决方案都不适合我的情况 看here https stackoverflow com questions 1421793 normal uibutton c
  • Cypher 查询列出所有断开连接的图 Neo4j 图数据库?

    Neo4j 图形数据库包含大约 50 000 个节点和超过 50 000 个关系 有一个包含大多数节点的主图 但有几个图尚未连接到主图 为了连接各种图以形成一个大的主图 我打算使用 Cypher 查询来列出按其大小排序的路径或连接节点的集合
  • Selenium find element_by_id 不适用于单选按钮

    所以我一直在 Python 中使用 Selenium 我完成了我的代码 当时有效 但突然它选择不再工作 再具体一点 如果我尝试 driver find element by id leasingtrue click 它返回给我错误 sele
  • axios post请求错误,来自react的422(不可处理的实体)

    来自 FastAPI 和 sqlalchemy app post users def create users email str pwd str first name str last name str phone number str
  • 本地主机上的 Nagle 算法

    Nagle 算法在 Windows 中的环回连接上是否处于活动状态 在 Windows 上 出于性能原因 Nagle 算法不适用于环回 TCP 连接微软文档 http technet microsoft com en us library
  • 是否可以使用托管代码中的 C# 反射来调用非托管代码?

    是否可以使用反射和 C NET 动态调用在 NET 出现之前用 C 或 C 编写的不同函数 带参数 非托管代码 如果可能的话 一个小的 C 示例将不胜感激 是的 动态 P Invoke 在 NET 中可以通过不同的方式实现 LoadLibr
  • 如何从线程更新 Kivy 元素?

    我有一个套接字客户端调用View 每次收到消息时都会进行类处理 我已经以这样的方式分割了我的代码 以便这个类可以简单地使用print 或任何其他显示方法 如我所愿 不过 Kivy似乎并不喜欢这种方式 我已经延长了Kivy的BoxLayout
  • 获取合并提交的合并分支名称

    Git 是一个编写得非常好的软件 你可能会花很长时间使用它 但并不真正理解它到底发生了什么 我正在尝试获取最近与 master 分支合并的分支的名称 但我似乎没有通过 git log git show 等得到任何结果 当我查看 master
  • php 页面重定向取决于选择框的选择

    我正在尝试重定向到一个页面 但基于选择框的答案 基本上在下面的示例中 如果在通过按钮提交表单时选择了 p1 如何使页面重定向到 thispage php 如果选择 p2 如何使页面重定向到 thatpage php 我感谢所有评论 谢谢
  • 每个结果后清除 SFSpeechAudioBufferRecognitionRequest 的输入 (Swift3)

    我通过这个将语音集成到文本中应用程序教程 http www appcoda com siri speech framework 我面临的问题是我希望用户可以自己编写 编辑某些内容 但 SFSpeechAudioBufferRecogniti