我试图将语音转换为文本并使用语音框架在UILabel中显示它.我已经授权用户允许使用麦克风.
这是我的代码
- (void)startRecording {
if (_recognitionTask != nil) {
[_recognitionTask cancel];
_recognitionTask = nil;
}
NSError *error;
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryRecord error:&error];
[audioSession setMode:AVAudioSessionModeMeasurement error:&error];
[audioSession setActive:YES error:&error];
_recognitionRequest = [[SFSpeechAudioBufferRecognitionRequest alloc] init];
_recognitionTask = [[SFSpeechRecognitionTask alloc] init];
AVAudioInputNode *inputNode = [_audioEngine inputNode];
_recognitionRequest.shouldReportPartialResults = YES;
_recognitionTask = [_speechRecognizer recognitionTaskWithRequest:_recognitionRequest resultHandler:^(SFSpeechRecognitionResult *result, NSError *error) {
BOOL isFinal = NO;
if (result != nil) {
_textLabel.text = [[result bestTranscription] formattedString];
isFinal = result.isFinal;
}
NSLog(@"%@", error);
if …Run Code Online (Sandbox Code Playgroud) 这个问题与新的iOS 12功能有关:Siri Shortcuts.用户可以使用Siri快捷方式通过自定义语音短语或新的iOS 12"快捷方式"应用程序触发应用程序特定功能(由开发人员创建).快捷方式应用程序允许您通过组合应用程序的快捷方式来创建工作流程,类似于Mac上的Automator应用程序.
在我们的应用程序中,我们实现了特定功能的快捷方式 这意味着用户可以通过语音或快捷方式应用程序触发此快捷方式来执行此功能.我们的快捷方式在iOS的快捷方式应用程序中通过向Siri捐赠我们的意图来"自动".
问题是,如何自定义此快捷方式?默认情况下,我们的快捷方式如下所示:
如您所见,快捷方式仅显示标签传输"X"到"X",并且不允许您配置此快捷方式.当我将我的快捷方式与其他应用程序的其他快捷方式进行比较时,我发现这些快捷方式是可配置的,就像来自应用程序"Giphy"的快捷方式:
此快捷方式允许您配置"搜索","显示GIF选择器"和"选择多个".还要注意屏幕底部的变量,例如Ask When Run变量.
我找不到有关如何配置快捷方式的任何文档.在Apple(SoupChef)的示例代码中,它们也不提供可配置的快捷方式.
根据苹果文件,可以发送的请求数量是有限制的SFSpeechRecognizer。
准备好处理由语音识别限制引起的故障。由于语音识别是一项基于网络的服务,因此会实施限制,以便所有应用程序都可以免费使用该服务。单个设备每天可以执行的识别数量可能受到限制,并且每个应用程序可能会根据每天发出的请求数量进行全局限制。如果识别请求很快失败(启动后一两秒内),请检查识别服务是否变得不可用。如果是,您可能需要要求用户稍后重试。 https://developer.apple.com/documentation/speech/sfspeechrecognizer
另一份文档称,一台设备每小时可以发送 1000 个请求。
设备可以发出的 SFSpeechRecognitionRequest 调用数量的当前速率限制是每小时 1000 个请求。请注意,此限制是针对设备可以发出的请求数量,与发出请求的应用程序无关。这与请求相关的音频长度无关。对于给定的 SFSpeechRecognitionRequest,每个请求最多允许您播放一分钟的音频。
现在我正在创建一个SFSpeechRecognizer如下所示的属性,并检查supportsOnDeviceRecognition指示语音识别器是否可以在没有网络访问的情况下运行的属性。它在我安装了 iOS 13.2.3 的设备上返回true。
let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "en-US"))!
print(speechRecognizer.supportsOnDeviceRecognition) //true
Run Code Online (Sandbox Code Playgroud)
我尝试离线运行我的应用程序,在没有互联网连接的情况下它也可以正常工作。但目前尚不清楚是否仍有请求限制supportsOnDeviceRecognition。在这种情况下,SFSpeechRecognizer即使设备连接到互联网,也可能不会连接到 Apple 服务器,因为这是不必要的。supportsOnDeviceRecognition只有在正确的情况下才会有速率限制吗?
我必须使用Siri通过我的应用程序发起一个voip电话.它正在演示项目中工作但是当我将Intents Extension添加到我现有的项目中时,Siri不再工作了.
在系统设置中,我的应用程序未显示在"应用支持"部分中.Plist配置如下:
另见plist扩展配置:
每当我发出任何声音命令时,它都在说"我希望我可以,但是<app>还没有把它与我联系起来."
我也尝试过启用Siri功能.让我知道我在那里做错了什么.
谢谢.
在我的应用程序中,我创建了一个SiriKit意图,该意图使用户可以搜索人。
如果他们直接从Siri触发了此意图,那么我想使用该搜索字符串打开我的应用程序并显示结果-我可以通过将.continueInApp和传递NSUserActivity给完成处理程序来实现。
但是,如果意图是Shortcuts应用程序流的一部分,那么我想将结果作为意图处理程序的输出传递-再次,我可以通过返回结果数组并返回.success到完成处理程序来做到这一点。
我的问题是我的处理程序如何确定运行它的上下文,以便它可以启动我的应用程序或在适当的情况下直接返回结果?
我有一个Intent Extension与View该工作相当不错的用于显示应用程序的信息类别。
现在TouchID出于安全原因需要启用,因此用户需要在请求信息之前进行身份验证。
我尝试了这个:
func handle(intent: GetSaldoIntent, completion: @escaping (GetSaldoIntentResponse) -> Void) {
let myContext = LAContext()
myContext.evaluatePolicy(
.deviceOwnerAuthenticationWithBiometrics,
localizedReason: "Unlock to see the info",
reply: { [unowned self] (success, error) -> Void in
if( success ) {
completion(GetSaldoIntentResponse.success(saldo: String(self.paymentProvider.balance)))
return
}
})
completion(GetSaldoIntentResponse(code: .failureRequiringAppLaunch, userActivity: nil))
}
}
Run Code Online (Sandbox Code Playgroud)
但是TouchID对话框关闭Siri屏幕,然后对话结束:
有没有一种方法可以请求TouchId内部验证Intent Extension?
我知道可以PKPayment做类似的事情,但这不是交易,所以我不能使用ApplePay。
显示 的实例时INUIAddVoiceShortcutViewController,我想让快捷方式的意图参数之一(类型Decimal)默认为Ask Each Time。
现在,它默认为文件中的Default Value值.intentdefinition。(0如果留空,此字段将重置为。)
有没有办法定义一个意图,这样当它在快捷方式中实例化时,它有一个默认为的参数Ask Each Time?
我正在编写一个 Swift 框架,其中包含一个 Siri 意图定义文件和代码,这些文件和代码在主应用程序、Today 扩展和 Siri 意图扩展中使用。我正在使用 Cocoapods 分发框架(它位于私有仓库中,因此我无法共享框架本身)。这适用于从应用程序和 Today 扩展中编译、链接和执行代码。
当用户执行相应的操作时,应用程序(或 Today 扩展程序)成功地捐赠了意图。然后我可以转到系统设置/Siri/建议的快捷方式并记录“个性化短语”以触发意图。
当我使用录制的短语调用 Siri 时,她回答说“我没有看到与之相关的应用程序。你需要下载一个。”
捐赠意图时,我还注意到以下错误消息:
[Intents] -[INIntentResponse init] App 代理 < com.company.appID file:///Users/username/Library/Developer/CoreSimulator/Devices/.../data/Containers/Bundle/Application/.../AppName .app :0>> 不包含意图 nameOfIntent,回退到当前包
相同的代码运行良好,直到我将它移到框架中,所以我知道代码是正确的。
我正在实现 ios 快捷方式意图。我只是在 myProject 中添加意图,并且不想在快捷方式选项中显示“运行时显示”。
如何删除“运行时显示”选项?
我需要向Flutter应用程序提供SiriKit功能。对于我来说,是否可能还不是很清楚。
以我的观点,这是不可能的,因为Flutter不支持位码生成。
与此并行,我可以看到计划支持位代码,或者有人对此进行了一些测试。
有人可以澄清状态吗?