iOS:创建Siri 功能
前奏:
iOS 10 出来之后,我们开发者也可以使用类似Siri的功能。它是使用Siri里面的一个语音识别框架Speech framework来处理siri的。现在, 让我们来看看 一些 主要的代码吧。 我们需要一个 UITextView 和 UIButton 就 能体现了。
实现:
- 第一步:定义属性
@interface ViewController () <SFSpeechRecognizerDelegate> @property (strong, nonatomic) UIButton *siriBtu;//siri按钮 @property (strong, nonatomic) UITextView *siriTextView; //显示语音转化成的文本 @property (strong, nonatomic) SFSpeechRecognitionTask *recognitionTask; //语音识别任务 @property (strong, nonatomic)SFSpeechRecognizer *speechRecognizer; //语音识别器 @property (strong, nonatomic) SFSpeechAudioBufferRecognitionRequest *recognitionRequest; //识别请求 @property (strong, nonatomic)AVAudioEngine *audioEngine; //录音引擎 @end
- 第二步:进行语音识别检测
- (void)viewDidLoad {[super viewDidLoad]; //设备识别语言为中文NSLocale *cale = [[NSLocale alloc]initWithLocaleIdentifier:@"zh-CN"];self.speechRecognizer = [[SFSpeechRecognizer alloc]initWithLocale:cale];self.siriBtu.enabled = false; //设置代理_speechRecognizer.delegate = self; //发送语音认证请求(首先要判断设备是否支持语音识别功能)[SFSpeechRecognizer requestAuthorization:^(SFSpeechRecognizerAuthorizationStatus status) {bool isButtonEnabled = false;switch (status) {case SFSpeechRecognizerAuthorizationStatusAuthorized:isButtonEnabled = true;NSLog(@"可以语音识别");break;case SFSpeechRecognizerAuthorizationStatusDenied:isButtonEnabled = false;NSLog(@"用户被拒绝访问语音识别");break;case SFSpeechRecognizerAuthorizationStatusRestricted:isButtonEnabled = false;NSLog(@"不能在该设备上进行语音识别");break;case SFSpeechRecognizerAuthorizationStatusNotDetermined:isButtonEnabled = false;NSLog(@"没有授权语音识别");break;default:break;}self.siriBtu.enabled = isButtonEnabled;}]; //创建录音引擎self.audioEngine = [[AVAudioEngine alloc]init]; }
- 第三步:按钮的点击事件
- (void)microphoneTap:(UIButton *)sender {if ([self.audioEngine isRunning]) {[self.audioEngine stop];[self.recognitionRequest endAudio];self.siriBtu.enabled = YES;[self.siriBtu setTitle:@"开始录制" forState:UIControlStateNormal];}else{[self startRecording];[self.siriBtu setTitle:@"停止录制" forState:UIControlStateNormal];} }
- 第四步:开始录制语音,并将语音转为文本
-(void)startRecording{if (self.recognitionTask) {[self.recognitionTask cancel];self.recognitionTask = nil;}AVAudioSession *audioSession = [AVAudioSession sharedInstance];bool audioBool = [audioSession setCategory:AVAudioSessionCategoryRecord error:nil];bool audioBool1= [audioSession setMode:AVAudioSessionModeMeasurement error:nil];bool audioBool2= [audioSession setActive:true withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];if (audioBool || audioBool1|| audioBool2) {NSLog(@"可以使用");}else{NSLog(@"这里说明有的功能不支持");}self.recognitionRequest = [[SFSpeechAudioBufferRecognitionRequest alloc]init];AVAudioInputNode *inputNode = self.audioEngine.inputNode;SFSpeechAudioBufferRecognitionRequest *recognitionRequest;self.recognitionRequest.shouldReportPartialResults = true; //开始识别任务self.recognitionTask = [self.speechRecognizer recognitionTaskWithRequest:self.recognitionRequest resultHandler:^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error) {bool isFinal = false;if (result) {self.siriTextView.text = [[result bestTranscription] formattedString]; //语音转文本isFinal = [result isFinal];}if (error || isFinal) {[self.audioEngine stop];[inputNode removeTapOnBus:0];self.recognitionRequest = nil;self.recognitionTask = nil;self.siriBtu.enabled = true;}}];AVAudioFormat *recordingFormat = [inputNode outputFormatForBus:0];[inputNode installTapOnBus:0 bufferSize:1024 format:recordingFormat block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {[self.recognitionRequest appendAudioPCMBuffer:buffer];}]; [self.audioEngine prepare];bool audioEngineBool = [self.audioEngine startAndReturnError:nil];NSLog(@"%d",audioEngineBool);self.siriTextView.text = @"我是小冰!Siri 冰,你说我听"; }
- 第五步:实现这个代理方法,就实现siri语音功能了
-(void)speechRecognizer:(SFSpeechRecognizer *)speechRecognizer availabilityDidChange:(BOOL)available{if(available){self.siriBtu.enabled = true;}else{self.siriBtu.enabled = false;} }
为原博主点赞:http://www.jianshu.com/p/b29069529bc2
转载于:https://www.cnblogs.com/XYQ-208910/p/6001495.html
iOS:创建Siri 功能相关推荐
- ios设计登录功能_亲爱的产品设计师,这是iOS 14的新功能
ios设计登录功能 On June 22, 2020 Apple previewed iOS 14 for the first time. As always there are quite some ...
- iOS 浏览相册功能实现 —— HERO博客
iOS 浏览相册功能实现,可缩放,画笔标记,缓存图片,记录下载进度. 首先看一下效果图: 下面简述下主要思路及相关代码: HWPhotoVC(控制器,用collcetView展示缩略图,点 ...
- 为改善Siri功能Apple收购语音助理初创公司
语音助理相当普及,而 Apple 的 Siri 经常被人诟病不够智能,最近 Apple 就收购了一间语音助理技术初创公司,希望可以改善 Siri 的功能,提升其实用价值.Apple 最近收购的语音助理 ...
- ios开发 架子鼓功能开发_适用于iOS开发人员的功能标志
ios开发 架子鼓功能开发 When building modern applications, things tend to move quite quickly. When you add mul ...
- 微信重启iOS端打赏功能;共享电单车小鹿单车退出北京市场;PayPal股价大涨创历史新高丨价值早报
第[749]期早报由[周一]赞助播出 01 今日头条 微信重启iOS端打赏功能,扫赞赏码完成支付 在苹果修改了有关打赏的规定后,微信又重启了打赏功能. 10月20日,微信更新上线了6.5.19 iOS ...
- File类创建删除功能的方法
package com.learn.demo01.File;import java.io.File; import java.io.IOException;/*File类创建删除功能的方法- publ ...
- 如何使用Bootstrap Modal和jQuery AJAX创建登录功能
by Yogi 由瑜伽士 Bootstrap Modal is an excellent way to create a Login form on your website. In this tut ...
- 苹果收购人工智能初创公司Voysis以改善语音助手Siri功能
近日,据国外媒体报道,苹果收购了人工智能(AI)初创公司Voysis,目的是为了改善语音助手Siri功能. Voysis总部位于爱尔兰都柏林,该公司专注于改进在线购物应用程序内部的数字助理,以便软件能 ...
- 阿里云服务器创建历史功能介绍 快速创建云服务器
当我们登录阿里云控制台创建云服务器的时候,通常的做法是先登录阿里云服务器购买界面,再配置计费方式.网络类型.实例规格.带宽.镜像等一系列云服务器参数,最后创建云服务器.如果我们在配置参数的过程中出现误 ...
最新文章
- win10下安装TensorFlow(CPU only)
- Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题
- 凭借识别人的情绪,他们做到了2000多万用户、1000多万订单
- caffe使用ctrl-c不能保存模型
- 数据分析对企业的重要性
- apache的源代码编译安装
- Java大数类自我需要掌握的
- AMD 2020届IC校招笔试题
- Tinker生成补丁包
- java怎么制作网页_如何制作网页
- Chrome 进阶:用扩展武装自己
- 定义一个Employee类,其中包括表示姓名、街道地址、城市和邮编等属性
- MySQL分区表详解
- 中国企业服务总线(ESB)市场趋势报告、技术动态创新及市场预测
- linux磁盘写保护怎么修改_linux
- android 实现果冻动画效果,手把手教你绘制Android粘性果冻动画组件
- [SSL_CHX][2021-8-19]数根
- 十五个问题了解个税汇算清缴
- Android自定义View 实现窗帘控件
- 一篇非大厂的 Android 面试总结心得~