问题标签 [sfspeechrecognizer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - 为“SFSpeechRecognizer”实现“用户停止讲话”通知
我正在尝试解决这个问题:SFSpeechRecognizer - 检测话语结束
问题是SFSpeechRecognizer
每次检测到的语音字符串发生变化时都会触发回调,但它只会在 60 秒的静音后触发(因此它会设置isFinal
标志)。
建议的技术是每次回调触发时启动一个 2 秒的计时器,如果计时器已经设置,则首先使计时器无效。
我已经实现了这种技术。然而,在我的计时器回调永远不会受到打击。
谁能告诉我为什么?
ios - SFSpeechRecognizer 同时请求?
我正在尝试使用 SFSpeechRecognizer 在我的应用程序中转录语音命令。命令只有一个字。SFSpeechAudioBufferRecognitionRequest(来自麦克风点击)可能需要几秒钟才能最终返回该单词的准确转录,但这对我的用例来说很好。
但是,在我的用例中,可能会在这几秒钟过去之前输入一个新命令。如何开始处理新请求,同时仍允许前一个请求继续改进其结果(即,不会过早停止前一个请求)?
我没完没了地用谷歌搜索,似乎没有关于麦克风输入的同时/并发请求的文档。
任何想法将不胜感激!
ios - 语音识别会话崩溃
我知道已经提出了类似的问题,但提出的解决方案对我没有帮助。
在我的应用程序中,我必须识别用户的语音并合成文本到语音。问题是,当应用程序尝试识别时(尤其是在文本转语音之后,但在其他情况下:例如,在第二次识别尝试时),我会随机崩溃。
我有一个特殊的 Speecher 类,它有几个明显的变量(一些是私有的)和两个主要功能:startRecord
和killRecord
.
在我尝试使用文本转语音之前或在我想取消/停止识别会话之前调用下一个函数:
我得到的很多是 lldb 错误。它看起来像这样:
代码中的问题字符串似乎是,inputNode = audioEngine.inputNode
但我不知道如何解决它。我之前已经尝试过audioEngine.inputNode.removeTap(onBus: 0)
,inputNode = audioEngine.inputNode
但无济于事。
ios - SFSpeechRecognizer 在 IOS 13.2 中无法正常工作
在 IOS 13.1 中,一切正常。从 13.2 开始,SFSpeechRecognizer 让我很难受。语音识别比以前花费的时间更长,结果。IsFinal bool 永远不会是真的。
我不仅在我的应用程序中与这些错误作斗争,而且还在官方示例代码项目(https://developer.apple.com/documentation/speech/recognizing_speech_in_live_audio)中得到它们。
有没有人遇到类似的问题??
ios - SFSpeechRecognizer 在线:在哪个 url 发送请求?
我正在使用 SFSpeechRecognizer(包:Speech)在 Swift 中开发一个 iOS 应用程序。
此应用程序是为使用 VPN 并阻止来自/发往外部网络的每个请求的组织开发的。
这是部分代码:
我需要知道从哪个 url 接收/发送了 RecognizerRequest,以便我可以将其传达给组织的网络团队,他们将打开与这些 url 的连接。在文档上我找不到很多。
macos - `kAFAssistantErrorDomain` 代码记录在哪里?
我正在尝试SFSpeechRecognizer
在 macOS 上使用。
我收到错误消息,例如:
如何解释这些错误信息?我在文档中的任何地方都找不到枚举的代码。
macos - 来自 `SFSpeechRecognizer` `recognitionTask` 在约 30 秒标记处的不需要的回调
如果我检查了回调中的SFSpeechRecognizer
recognitionTask
回调标记(在 macOS 上):
...我观察到:
即在我最后一次发言后大约 30 秒,还有一个额外的不需要的回调。
result
用于nil
最后一次回调。
它接近 30 秒的事实表明它代表了最大超时。
我不希望超时,因为我已经手动关闭了我的会话(在 5 秒左右,通过单击一个按钮):
有很多注释掉的代码,因为在我看来,有些进程我无法关闭,但我无法弄清楚。
完整的代码在这里。
谁能看到出了什么问题?
macos - 绕过/禁用 macOS 安全措施以实现 SFSpeechRecognizer 项目的高效开发周期
我正在构建一个使用 的 macOS 项目SFSpeechRecognizer
,而后者又使用了麦克风。
每次修改代码并重建时,我都必须:
然后我必须:
- 单击挂锁
- 使用我的指纹进行授权
- 取消选中并重新检查我的应用程序
现在我可以跑了。
这是因为我正在点击键盘事件。
但是在第一次运行时,由于我正在使用语音识别,所以我另外显示了两个对话框:
-授权此应用程序使用麦克风
-授权此应用程序将语音数据发送到 Apple
这些支票是由 Catalina 提供的。
每次我需要测试某些东西时,不得不这样做很快就会变得非常令人沮丧。这很容易每天 100 次。
在开发过程中有没有办法绕过这些安全措施?
更新
我尝试设置一个代码签名标识,Build settings -> Signing -> Codesign Identity -> Apple Development: mySigningId...
如下所示:
我然后Product -> Clean Build Folder
,只是以防万一。
然后我运行项目,体验对话框,第二次运行,这次没有对话框,做一个小的代码更改强制重建(比如在某处添加一个空格),再次运行。对话又回来了。
就像一个健全的检查,我检查我的Info.plist
,并观察:
有什么我想念的吗?
PS如果有人能推荐更合适的标签,我不胜感激
swift - 如何在 macOS / swift 的 AVAudioEngine 中选择音频输入设备(麦克风)?
AVAudioEngine
是否可以在 macOS 上使用 Swift 时选择输入设备?
用例:
我SFSpeechRecognizer
在 macOS 上使用。
要将麦克风数据输入其中,我正在使用
这将使用系统默认麦克风。
我有一个外接 USB 麦克风,我想改用它。我可以进入系统偏好设置 -> 音频并将默认输出设备设置为我的 USB 麦克风。然后它将起作用。但是,如果我断开麦克风并将其重新连接到不同的 USB 端口,我将不得不再次将其设置为默认值。
为避免重复执行此操作,我想通过代码手动设置麦克风。
这可能吗?
编辑:我发现使用 Obj-C 的Set AVAudioEngine 输入和输出设备。
swift - 如何使 SFSpeechRecognizer 在 macOS 上可用?
我正在尝试使用 Apple 的语音框架在 macOS 10.15.1 上进行语音识别。在 macOS 10.15 之前,语音识别只能在 iOS 上使用,但根据文档和这个谈话,现在应该也可以在 macOS 上使用。
但是,我所有使用它的尝试都导致SFSpeechRecognizer
'isAvailable
属性被设置为 false。根据那次谈话和文档,我启用了 Siri,并确保我的应用程序将"Privacy - Speech Recognition Usage Description"
键设置为 Info.plist 中的字符串值。
我还尝试启用代码签名(这个问题暗示可能是必要的),在系统偏好设置中的键盘 > 听写下启用听写。
这是一些示例代码,尽管细节可能并不重要;我已经尝试使用 Storyboard 而不是 SwiftUI,将回调SFSpeechRecognizer
内部和外部的实例化,requestAuthorization
未指定语言环境等。似乎没有任何效果:
特别奇怪的是,如果我运行应用程序然后单击“Try auth”按钮,authStatus
回调返回的始终是.authorized
. 但是,从来没有出现过要求我授权该应用程序的对话框,并且该应用程序未显示在系统偏好设置 > 安全和隐私 > 隐私 > 语音识别下的授权应用程序列表中。
尽管如此,之后单击“测试”按钮会导致打印not available
。
It seems like there's some hole in my understanding of the macOS privacy/permissions system, but I'm not sure how to debug further. I also think it should be possible to get this working, because I've seen other questions on StackOverflow suggesting that people have done so, for example here, here.
EDIT: At the suggestion of a comment, I tried simply ignoring the fact that isAvailable
is false by replacing my check for it with code to actually try to transcribe a file, e.g.:
Then it fails, printing: The operation couldn’t be completed. (kAFAssistantErrorDomain error 1700.)
. So it seems like it really is necessary to check for isAvailable
, and my question remains: how to get it to be true
?