iOS 10 和Xcode8 一起 創(chuàng)建 Siri 功能步驟詳解(OC寫的 )
iOS 10 出來(lái)之后,我們開發(fā)者也可以使用類似Siri的功能。。讓我們來(lái)看看怎么使用吧,其實(shí)他是使用Siri里面的一個(gè)語(yǔ)音識(shí)別框架Speech framework。 讓我們來(lái)看看 一些 主要的代碼吧。 我們需要一個(gè) UITextView 和 UIButton 就 能體現(xiàn)了。
第一步:定義屬性
@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
第二步:進(jìn)行語(yǔ)音識(shí)別檢測(cè)
- (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(@"可以語(yǔ)音識(shí)別");
break;
case SFSpeechRecognizerAuthorizationStatusDenied:
isButtonEnabled = false;
NSLog(@"用戶被拒絕訪問(wèn)語(yǔ)音識(shí)別");
break;
case SFSpeechRecognizerAuthorizationStatusRestricted:
isButtonEnabled = false;
NSLog(@"不能在該設(shè)備上進(jìn)行語(yǔ)音識(shí)別");
break;
case SFSpeechRecognizerAuthorizationStatusNotDetermined:
isButtonEnabled = false;
NSLog(@"沒(méi)有授權(quán)語(yǔ)音識(shí)別");
break;
default:
break;
}
self.siriBtu.enabled = isButtonEnabled;
}];
self.audioEngine = [[AVAudioEngine alloc]init];
}
第三步:按鈕的點(diǎn)擊事件
- (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];
}}
第四步 :開始錄制語(yǔ)音,以及將語(yǔ)音轉(zhuǎn)為文字
-(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(@"這里說(shuō)明有的功能不支持");
}
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 冰,你說(shuō)我聽";
}
最后一個(gè)代理方法:
-(void)speechRecognizer:(SFSpeechRecognizer *)speechRecognizer availabilityDidChange:(BOOL)available{
if(available){
self.siriBtu.enabled = true;
}else{
self.siriBtu.enabled = false;
}
}
這樣我們 就可以實(shí)現(xiàn)Siri的功能了。
總結(jié)
以上所述是小編給大家介紹的iOS 10 和Xcode8 一起 創(chuàng)建 Siri 功能步驟詳解(OC寫的 ),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
iOS基于UIScrollView實(shí)現(xiàn)滑動(dòng)引導(dǎo)頁(yè)
這篇文章主要為大家詳細(xì)介紹了iOS基于UIScrollView實(shí)現(xiàn)滑動(dòng)引導(dǎo)頁(yè)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
iOS實(shí)現(xiàn)動(dòng)態(tài)自適應(yīng)標(biāo)簽
這篇文章主要為大家詳細(xì)介紹了iOS動(dòng)態(tài)自適應(yīng)標(biāo)簽的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
iOS使用WKWebView加載HTML5不顯示屏幕寬度的問(wèn)題解決
這篇文章主要介紹了iOS使用WKWebView加載HTML5不顯示屏幕寬度的問(wèn)題解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
iOS如何去掉導(dǎo)航欄(UINavigationBar)下方的橫線
本篇文章主要介紹了iOS如何去掉導(dǎo)航欄(UINavigationBar)下方的橫線,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05
總結(jié)iOS App開發(fā)中控制屏幕旋轉(zhuǎn)的幾種方式
這篇文章主要介紹了iOS app開發(fā)中控制屏幕旋轉(zhuǎn)的方法總結(jié),分為自動(dòng)旋轉(zhuǎn)和手動(dòng)旋轉(zhuǎn)以及強(qiáng)制旋轉(zhuǎn)三種情況,代碼為Objective-C語(yǔ)言,需要的朋友可以參考下2016-02-02
Flutter?Module添加到iOS項(xiàng)目示例詳解
這篇文章主要為大家介紹了Flutter?Module添加到iOS項(xiàng)目示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08

