文档章节

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

 杨勇汉
发布于 2015/02/01 14:04
字数 948
阅读 18
收藏 0

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

本文转载自:http://blog.csdn.net/rhljiayou/article/details/9821561

上一篇: Servlet
下一篇: javaweb小结
粉丝 2
博文 69
码字总数 0
作品 0
东城
私信 提问
iphone之使用讯飞语音sdk实现语音识别功能

1、首先下载讯飞sdk及文档:http://open.voicecloud.cn/ 2、学习里面的demo简单实现了一个小的语音识别功能 先做一个简单demo,看看识别效果。注:语音识别必须联网。 所有接口必需在联网状态...

长平狐
2013/12/25
841
0
语音助手的安卓客户端设计

一、开发环境配置 本论文选用科大讯飞开发平台提供的语音合成和语音识别技术,完成语音助手软件的开发,最终在安卓手机上正常运行。在win10完成,使用android studio开发编译,软件测试机器为...

yueqian_scut
2017/08/20
0
0
柳传志、李开复谈科大讯飞和语音识别那些事儿

3 月 22 日下午,科大讯飞在北京国家会议中心发布新一代“语音云”平台,“捎带”发布了“中文版 Siri ”应用讯飞语点。 这里用“捎带”形容现场的情况是最恰当的:科大讯飞 CEO 刘庆峰作完演...

虫虫
2012/03/23
4.6K
11
Android Studio集成讯飞语音开发出现21001错误

最近在做Android聊天APP,其中需要用到语音识别技术,用的是讯飞语音识别,但是在集成时遇到了21001错误。 讯飞官网上提供的还是老旧的Eclipse上的,我用的最新的Android Studio 2.1,不过本...

有力量的神经病
2016/05/09
856
0
Android语音识别开发详解(基于讯飞语音SDK)

一、准备工作 1、你需要android手机应用开发基础 2、科大讯飞语音识别SDK android版 3、科大讯飞语音识别开发API文档 4、android手机 关于科大讯飞SDK及API文档,请到科大语音官网下载:htt...

茗香墨语
2016/06/14
5.2K
8

没有更多内容

加载失败,请刷新页面

加载更多

32位与64位Linux系统下各类型长度对比

64 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂);可以访问大型数据库。本文介绍的是64位下C语言开发程序注意事项。 1. 32 位和 64 位C数据类型...

mskk
22分钟前
6
0
Vue 实现点击空白处隐藏某节点(三种方式:指令、普通、遮罩)

在项目中往往会有这样的需求: 弹出框(或Popover)在 show 后,点击空白处可以将其 hide。 针对此需求,整理了三种实现方式,大家按实际情况选择。 当然,我们做项目肯定会用到 UI 框架,常...

张兴华ZHero
28分钟前
7
0
SpringBoot激活profiles你知道几种方式?

多环境是最常见的配置隔离方式之一,可以根据不同的运行环境提供不同的配置信息来应对不同的业务场景,在SpringBoot内支持了多种配置隔离的方式,可以激活单个或者多个配置文件。 激活Profi...

恒宇少年
30分钟前
7
0
PDF修改文字的方法有哪些?怎么修改PDF文件中的文字

PDF修改文字一直以来都是一个难以解决的问题,很多的办公族在办公的时候会有修改PDF文件中的文字的需要,可是PDF文件一般是不能进行编辑和修改的,难道就没有什么办法解决这个问题了嘛?不要...

趣味办公社
33分钟前
5
0
企业组织中采用服务网格的挑战

作者:Christian Posta 译者:罗广明 原文:https://blog.christianposta.com/challenges-of-adopting-service-mesh-in-enterprise-organizations/ 编者按 本文作者介绍了企业组织采用服务网...

jimmysong
42分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部