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
源码下载地址: