iphone之使用讯飞语音sdk实现语音识别功能

来源:互联网 发布:linux kasan 编辑:程序博客网 时间:2024/06/06 06:48

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

源码下载地址:

http://download.csdn.net/detail/rhljiayou/5889565

原创粉丝点击