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 和 UIButtonfor (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_closeUIButton *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~100if (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
源码下载地址:
http://download.csdn.net/detail/rhljiayou/5889565