美文网首页Des's iOS Siri开发IOS
iOS 10 和Xcode8 一起 创建 Siri 功能(O

iOS 10 和Xcode8 一起 创建 Siri 功能(O

作者: icc_tips | 来源:发表于2016-10-25 14:24 被阅读1029次

iOS 10 出来之后,我们开发者也可以使用类似Siri的功能。。让我们来看看怎么使用吧,其实他是使用Siri里面的一个语音识别框架Speech framework。 让我们来看看 一些 主要的代码吧。 我们需要一个 UITextView 和 UIButton 就 能体现了。

第一步:定义属性

@interface ViewController ()  <SFSpeechRecognizerDelegate>

@property (strong, nonatomic) UIButton *siriBtu;

@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 冰,你说我听";

}

最后一个代理方法:

-(void)speechRecognizer:(SFSpeechRecognizer *)speechRecognizer availabilityDidChange:(BOOL)available{

if(available){

self.siriBtu.enabled = true;

}else{

self.siriBtu.enabled = false;

}

}

这样我们 就可以实现Siri的功能了,

相关文章

网友评论

  • 9313dbd1bf65:请问这个demo的Siri功能是怎么体现的
    icc_tips:@SNH 就是把你说的话转成文字呀
    9313dbd1bf65:运行之后并不能看到什么效果
  • 草里有志虫:抱歉,我之前没在info中配置完全,配置完了就可以了。。mark
    1c9b97cc7483:有详细的解释吗
    icc_tips:谢谢,互相学习
  • zzww:循环出现 可以使用
    1
    可以使用
    1
    可以使用
    请问有demo吗
    icc_tips:@zzww ??。?。?demo就是主要代码都出来了呀
  • 亚洲醋王丶:厉害 收藏一波
    icc_tips:@The_boy还是小菜鸟。。。互相学习 :relaxed:
  • icc_tips:可以的呀
  • 卟师:我能转载分享吗?我会标注上作者和出处的,
    icc_tips:@卟师 可以的呀,,大家一起学习

本文标题:iOS 10 和Xcode8 一起 创建 Siri 功能(O

本文链接:https://www.haomeiwen.com/subject/slpruttx.html