iOS 10 Siri調(diào)用

iOS10 蘋果開放SIri API,SiriKit的功能非常強(qiáng)大,支持音頻、視頻、消息發(fā)送接收、搜索照片、預(yù)訂行程、管理鍛煉等等。#import@interface ViewController ()/**

* 1. 先導(dǎo)入Speech.framework的框架

* 2. 導(dǎo)入頭文件設(shè)置代理

* 3. 聲明語音識(shí)別器

* 4. 授權(quán)

*/

@property (strong, nonatomic) IBOutlet UIButton *siriBtn;//siri按鈕

@property (strong, nonatomic) IBOutlet UITextView *siriTextView;//顯示語音轉(zhuǎn)化成文字

@property(nonatomic,strong)SFSpeechRecognitionTask *recongnitionTask;//語音識(shí)別任務(wù)

@property(nonatomic,strong)SFSpeechRecognizer *speechRecognizer;//語音識(shí)別器

@property(nonatomic,strong)SFSpeechAudioBufferRecognitionRequest *recongnitionRequest;//語音識(shí)別請(qǐng)求

@property(nonatomic,strong)AVAudioEngine *audioEngine;//錄音引擎

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

//設(shè)備識(shí)別語言為中文

NSLocale *locale = [[NSLocale alloc]initWithLocaleIdentifier:@"zh-CN"];

self.speechRecognizer = [[SFSpeechRecognizer alloc]initWithLocale:locale];

self.siriBtn.enabled = false;

//設(shè)置語音識(shí)別代理

_speechRecognizer.delegate =self;

//發(fā)送語音認(rèn)證請(qǐng)求(首先要判斷設(shè)備是否支持語音識(shí)別功能)

[SFSpeechRecognizer requestAuthorization:^(SFSpeechRecognizerAuthorizationStatus status) {

bool isButtonEnaled =false;//初始值不允許

switch (status) {

case SFSpeechRecognizerAuthorizationStatusAuthorized:

isButtonEnaled = true;

NSLog(@"可以語音識(shí)別");

break;

case SFSpeechRecognizerAuthorizationStatusDenied:

isButtonEnaled = false;

NSLog(@"用戶被拒絕訪問語音識(shí)別");

break;

case SFSpeechRecognizerAuthorizationStatusRestricted:

isButtonEnaled = false;

NSLog(@"不能在該設(shè)備使用語音識(shí)別");

break;

case SFSpeechRecognizerAuthorizationStatusNotDetermined:

isButtonEnaled = false;

NSLog(@"沒有授權(quán)語音識(shí)別");

default:

break;

}

self.siriBtn.enabled = isButtonEnaled;

}];

///創(chuàng)建錄音引擎

self.audioEngine = [[AVAudioEngine alloc]init];

}

//按鈕的點(diǎn)擊事件

- (IBAction)microphoneTap:(UIButton *)sender {

if ([self.audioEngine isRunning]) {

[self.audioEngine stop];

[self.recongnitionRequest endAudio];

self.siriBtn.enabled =YES;

[self.siriBtn setTitle:@"開始錄制" forState:UIControlStateNormal];

}else{

[self startRecording];

[self.siriBtn setTitle:@"停止錄制" forState:UIControlStateNormal];

}

}

//開始錄制語音,并將語音轉(zhuǎn)換成文字

-(void)startRecording{

if (self.recongnitionTask) {

[self.recongnitionTask cancel];

self.recongnitionTask = 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.recongnitionRequest = [[SFSpeechAudioBufferRecognitionRequest alloc]init];

AVAudioInputNode *inputmode = self.audioEngine.inputNode;

SFSpeechAudioBufferRecognitionRequest *recongnitionRequest;

self.recongnitionRequest.shouldReportPartialResults =true;

//開始識(shí)別任務(wù)

self.recongnitionTask = [self.speechRecognizer recognitionTaskWithRequest:self.recongnitionRequest resultHandler:^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error) {

bool isFinal = false;

if (result) {

self.siriTextView.text = [[result bestTranscription]formattedString];//語音轉(zhuǎn)文本

isFinal = [result isFinal];

}

if (error || isFinal) {

[self.audioEngine stop];

[inputmode removeTapOnBus:0];

self.recongnitionRequest = nil;

self.recongnitionTask = nil;

self.siriBtn.enabled = true;

}

}];

AVAudioFormat *recodingFormat = [inputmode outputFormatForBus:0];

[inputmode installTapOnBus:0 bufferSize:1024 format:recodingFormat block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {

[self.recongnitionRequest appendAudioPCMBuffer:buffer];

}];

[self.audioEngine prepare];

bool audioEngineBool = [self.audioEngine startAndReturnError:nil];

NSLog(@"%d",audioEngineBool);

self.siriTextView.text = @"我是 siri,你說我聽";

}

//實(shí)現(xiàn)代理,可以錄音

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

if(available){

self.siriBtn.enabled = true;

}else{

self.siriBtn.enabled = false;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容