前奏:

  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 功能相关推荐

  1. ios设计登录功能_亲爱的产品设计师,这是iOS 14的新功能

    ios设计登录功能 On June 22, 2020 Apple previewed iOS 14 for the first time. As always there are quite some ...

  2. iOS 浏览相册功能实现 —— HERO博客

    iOS 浏览相册功能实现,可缩放,画笔标记,缓存图片,记录下载进度. 首先看一下效果图:       下面简述下主要思路及相关代码: HWPhotoVC(控制器,用collcetView展示缩略图,点 ...

  3. 为改善Siri功能Apple收购语音助理初创公司

    语音助理相当普及,而 Apple 的 Siri 经常被人诟病不够智能,最近 Apple 就收购了一间语音助理技术初创公司,希望可以改善 Siri 的功能,提升其实用价值.Apple 最近收购的语音助理 ...

  4. ios开发 架子鼓功能开发_适用于iOS开发人员的功能标志

    ios开发 架子鼓功能开发 When building modern applications, things tend to move quite quickly. When you add mul ...

  5. 微信重启iOS端打赏功能;共享电单车小鹿单车退出北京市场;PayPal股价大涨创历史新高丨价值早报

    第[749]期早报由[周一]赞助播出 01 今日头条 微信重启iOS端打赏功能,扫赞赏码完成支付 在苹果修改了有关打赏的规定后,微信又重启了打赏功能. 10月20日,微信更新上线了6.5.19 iOS ...

  6. File类创建删除功能的方法

    package com.learn.demo01.File;import java.io.File; import java.io.IOException;/*File类创建删除功能的方法- publ ...

  7. 如何使用Bootstrap Modal和jQuery AJAX创建登录功能

    by Yogi 由瑜伽士 Bootstrap Modal is an excellent way to create a Login form on your website. In this tut ...

  8. 苹果收购人工智能初创公司Voysis以改善语音助手Siri功能

    近日,据国外媒体报道,苹果收购了人工智能(AI)初创公司Voysis,目的是为了改善语音助手Siri功能. Voysis总部位于爱尔兰都柏林,该公司专注于改进在线购物应用程序内部的数字助理,以便软件能 ...

  9. 阿里云服务器创建历史功能介绍 快速创建云服务器

    当我们登录阿里云控制台创建云服务器的时候,通常的做法是先登录阿里云服务器购买界面,再配置计费方式.网络类型.实例规格.带宽.镜像等一系列云服务器参数,最后创建云服务器.如果我们在配置参数的过程中出现误 ...

最新文章

  1. win10下安装TensorFlow(CPU only)
  2. Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题
  3. 凭借识别人的情绪,他们做到了2000多万用户、1000多万订单
  4. caffe使用ctrl-c不能保存模型
  5. 数据分析对企业的重要性
  6. apache的源代码编译安装
  7. Java大数类自我需要掌握的
  8. AMD 2020届IC校招笔试题
  9. Tinker生成补丁包
  10. java怎么制作网页_如何制作网页
  11. Chrome 进阶:用扩展武装自己
  12. 定义一个Employee类,其中包括表示姓名、街道地址、城市和邮编等属性
  13. MySQL分区表详解
  14. 中国企业服务总线(ESB)市场趋势报告、技术动态创新及市场预测
  15. linux磁盘写保护怎么修改_linux
  16. android 实现果冻动画效果,手把手教你绘制Android粘性果冻动画组件
  17. [SSL_CHX][2021-8-19]数根
  18. 十五个问题了解个税汇算清缴
  19. Android自定义View 实现窗帘控件
  20. 一篇非大厂的 Android 面试总结心得~

热门文章

  1. python爬取淘宝销量_python爬取淘宝排名
  2. 价值十个亿的淘宝搜索功能
  3. Oracle数据库设计方法
  4. Postman进阶篇动态参数、自定义动态参数及自定义动态参数全局变量断言
  5. 星之轨迹服务器维护,10月17日例行维护公告
  6. C#ObjectArx Cad删除实体
  7. CreateJS-EaselJS文档翻译
  8. python习题答案集
  9. vim插件——auto-pairs
  10. CAD文件如何转成PDF格式?告诉你如何转换