1、首先下载讯飞sdk及文档:http://open.voicecloud.cn/
2、学习里面的demo简单实现了一个小的语音识别功能
先做一个简单demo,看看识别效果。注:语音识别必须联网。
所有接口必需在联网状态下才能正常使用。
效果图:
#import <UIKit/UIKit.h> #import "iflyMSC/IFlySpeechRecognizer.h" #import "iflyMSC/IFlyDataUploader.h" @protocol SpeechAlertViewDelegate <NSObject> @optional - (void)getResultText:(NSString *)text; @end @interface SpeechAlertView : UIAlertView<IFlySpeechRecognizerDelegate> { UIImageView *speechImage;//声音图片 IFlySpeechRecognizer * _iFlySpeechRecognizer;//语音识别对象 UIView *backgroundView; } @property (assign, nonatomic)id<SpeechAlertViewDelegate> speechDelegate; @end
#import "SpeechAlertView.h" #define APPID @"51de5743" #define TIMEOUT @"20000" // timeout 连接超时的时间,以ms为单位,毫秒,符号ms ,1000 毫秒 = 1秒,30000=30秒 //timeout:网络超时时间,单位:ms,默认为20000,范围0-30000 @implementation SpeechAlertView -(id)init { self = [super initWithFrame:CGRectMake(0, 0, 300, 220)]; if (self) { // Initialization code } return self; } - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code } return self; } //uialertview的大小位置 -(void)setFrame:(CGRect)frame{ //重新设置弹出框的大小和位置 UIWindow *window = [UIApplication sharedApplication].keyWindow; [super setFrame:CGRectMake((window.frame.size.width-self.frame.size.width)/2, (window.frame.size.height-self.frame.size.height)/2, self.frame.size.width, self.frame.size.height)]; } //重新写界面内容 - (void) layoutSubviews { //屏蔽系统的ImageView 和 UIButton for (UIView *v in [self subviews]) { if ([v class] == [UIImageView class]){ [v setHidden:YES]; } if ([v isKindOfClass:[UIButton class]] || [v isKindOfClass:NSClassFromString(@"UIThreePartButton")]) { [v setHidden:YES]; } } //添加背影图 UIView *backView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; backView.backgroundColor = [UIColor colorWithRed:66/255.0 green:68/255.0 blue:70/255.0 alpha:1.0]; [self addSubview:backView]; //添加标题 UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, 0, backView.frame.size.width-20, 30)]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.text = @"语音识别"; titleLabel.font = [UIFont systemFontOfSize:16]; titleLabel.textColor = [UIColor colorWithRed:218.0/255.0 green:217.0/255.0 blue:217.0/255.0 alpha:1]; [backView addSubview:titleLabel]; //添加关闭按钮huati_close UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setImage:[UIImage imageNamed:@"alert_close.png"] forState:UIControlStateNormal]; [backView addSubview:button]; button.tag = 1; button.frame = CGRectMake(backView.frame.size.width-25, 5, 20, 20); [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; //添加黄线 UIView *xianView = [[UIView alloc]initWithFrame:CGRectMake(0, 30, backView.frame.size.width, 1)]; xianView.backgroundColor = [UIColor yellowColor]; [backView addSubview:xianView]; //添加内容 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 35, backView.frame.size.width, 40)]; label.backgroundColor = [UIColor clearColor]; label.text = @"默认不讲话5秒后自动关闭,间隔不讲话2秒后关闭,最多说20秒"; label.font = [UIFont boldSystemFontOfSize:15]; label.textAlignment = UITextAlignmentCenter; label.textColor = [UIColor yellowColor]; [backView addSubview:label]; label.numberOfLines = 0; //添加中间图片 speechImage = [[UIImageView alloc]initWithFrame:CGRectMake((self.frame.size.width-50)/2, 80, 50, 85)]; speechImage.image = [UIImage imageNamed:@"yuyin_01.png"]; [backView addSubview:speechImage]; //添加说完了按钮 UIButton *submitButton = [UIButton buttonWithType:UIButtonTypeCustom]; submitButton.frame = CGRectMake((backView.frame.size.width-170)/2, 170, 150, 35); submitButton.tag = 2; [submitButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [submitButton setTitle:@"说完了" forState:UIControlStateNormal]; [submitButton setBackgroundImage:[UIImage imageNamed:@"alert_tButton.png"] forState:UIControlStateNormal]; [submitButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; [backView addSubview:submitButton]; //想添加什么由此添加 //创建对象 NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@,timeout=%@",APPID,TIMEOUT]; //语音识别对象创建 _iFlySpeechRecognizer = nil; _iFlySpeechRecognizer = [IFlySpeechRecognizer createRecognizer:initString delegate:self]; // _iFlySpeechRecognizer.delegate = self; /* 2.vad_bos:静音超时时间,即用户多长时间不说话则当做超 时处理,单位:ms,engine 指定 sms 识别默认值为 5000,其他 情况默认值为 4000,范围 0-10000; 3.vad_eos:后端点静音检测时间,即用户停止说话多长时间 内即认为不再输入,自动停止录音,单位:ms,sms 识别默认 值为 1800,其他默认值为 700,范围 0-10000; */ [_iFlySpeechRecognizer setParameter:@"domain" value:@"sms"]; [_iFlySpeechRecognizer setParameter:@"sample_rate" value:@"16000"]; [_iFlySpeechRecognizer setParameter:@"plain_result" value:@"0"]; initString = nil; //开始识别 [_iFlySpeechRecognizer startListening]; } //按钮处理方法 -(void) buttonClicked:(id)sender { [self dismissWithClickedButtonIndex:0 animated:YES]; } //显示 -(void)show { // [super show]; UIWindow *window = [UIApplication sharedApplication].keyWindow; backgroundView = [[UIView alloc]initWithFrame:window.frame]; backgroundView.backgroundColor = [UIColor clearColor]; [backgroundView addSubview:self]; [window addSubview:backgroundView]; } //弹出框消失 -(void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated { [_iFlySpeechRecognizer stopListening]; [_iFlySpeechRecognizer cancel]; [_iFlySpeechRecognizer setDelegate:nil]; _iFlySpeechRecognizer = nil; speechImage = nil; [backgroundView removeFromSuperview]; backgroundView = nil; } #pragma mark - IFlySpeechRecognizerDelegate - (void) onVolumeChanged: (int)volume { NSLog(@"%d",volume); //录音的音量,音量范围1~100 if (volume>=0 &&volume<=5) { speechImage.image = [UIImage imageNamed:@"yuyin_01.png"]; }else if(volume>5 && volume<=30){ speechImage.image = [UIImage imageNamed:@"yuyin_02.png"]; }else{ speechImage.image = [UIImage imageNamed:@"yuyin_03.png"]; } } - (void) onBeginOfSpeech { NSLog(@"正在录音"); } - (void) onEndOfSpeech { NSLog(@"停止录音"); } - (void) onError:(IFlySpeechError *) error { NSLog(@"停止录音%@,%@",error,[error errorDesc]); [self dismissWithClickedButtonIndex:0 animated:YES]; } //结果 - (void) onResults:(NSArray *) results { NSMutableString *result = [[NSMutableString alloc] init]; NSDictionary *dic = [results objectAtIndex:0]; for (NSString *key in dic) { [result appendFormat:@"%@",key]; } NSLog(@"转写结果:%@--results:%@",result,results); //返回结果 [_speechDelegate getResultText:result]; } @end
源码下载地址: