iphone之使用讯飞语音sdk实现语音识别功能
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
iphone之使用讯飞语音sdk实现语音识别功能的更多相关文章
- 继《关于讯飞语音SDK开发学习》之打包过程中遇到小问题
关于讯飞语音SDK开发学习 使用vs自带打包,具体怎么操作就不说了,网上关于这方面的资料挺多的.例如:winform 打包部署,VS2010程序打包操作(超详细的),关键是桌面上创建快捷方式中的&qu ...
- 关于讯飞语音SDK开发学习
前奏,浑浑噩噩已经工作一年多,这一年多收获还是挺多的.逛园子应该有两年多了,工作后基本上是天天都会来园子逛逛,园子 里还是有很多牛人写了一些不错的博客,帮我解决很多问题.但是一直没写过博客,归根到底一 ...
- 讯飞语音SDK Android平台使用
1. 支持功能介绍: 2. Android API主要业务接口和流程介绍 -------------------------------------------------------- 工程代码: ...
- iOS: 讯飞语音的使用
一.介绍: 讯飞语音做的相当不错,容错率达到90%多,如果需要做语音方面的功能,它绝对是一个不错的选择.讯飞语音的功能很多:语音听写.语音识别.语音合成等,但我们最常用的还是语音听写.讯飞语音中包含界 ...
- 讯飞语音唤醒SDK集成流程
唤醒功能,顾名思义,通过语音,唤醒服务,做我们想做的事情. 效果图(开启应用后说讯飞语音或者讯飞语点唤醒) 源码下载 地址:http://download.csdn.net/detail/q48788 ...
- Android 讯飞语音听写SDK快速接入(附空指针解决和修改对话框文字方法)
1.账号准备工作 首先要有一个讯飞的账号啦,为后面申请APPID.APPKey等东西做准备.顺带一提:讯飞对不同认证类型用户开 放的SDK的使用次数是有不同的,详情如下图. 账号申请完成后,需要去你自 ...
- 一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino
大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说 ...
- Android讯飞语音云语音听写学习
讯飞语音云语音听写学习 这几天两个舍友都买了iPhone 6S,玩起了"Hey, Siri",我依旧对我的Nexus 5喊着"OK,Google" ...
- android讯飞语音开发常遇到的问题
场景:android项目中共使用了3个语音组件:在线语音听写.离线语音合成.离线语音识别 11208:遇到这个错误,授权应用失败,先检查装机量(3台测试权限),以及appid的申请时间(35天期限), ...
随机推荐
- EL表达式和JSTL标准标签库
一.EL表达式 什么是EL表达式 EL(Express Lanuage)表达式可以嵌入在jsp页面内部 减少jsp脚本的编写 EL出现的目的是要替代jsp页面中脚本的编写. EL表达式的作用 EL最主 ...
- 2809: [Apio2012]dispatching 可并堆 左偏树
https://www.lydsy.com/JudgeOnline/problem.php?id=2809 板子题wa了一下因为输出ans没有lld #include<iostream> ...
- shellcode在栈溢出中的利用与优化
0x00 前言 在<Windows Shellcode学习笔记——shellcode的提取与测试>中介绍了如何对shellcode作初步优化,动态获取Windows API地址并调用,并通 ...
- 第一章--Go与web应用
Go语言构建web应用的特性 可扩展 可维护 模块化 高性能 HTTP简介 HTTP是一种无状态.由文本构成的请求-响应(request-response)协议,这种协议使用的是客户端-服务器(cli ...
- Codeforces Round #288 (Div. 2) B. Anton and currency you all know 贪心
B. Anton and currency you all know time limit per test 0.5 seconds memory limit per test 256 megabyt ...
- 一个".java"的源文件中,是否可以包含多个类?(除了匿名内部类),有什么限制?
# 二.一个".java"的源文件中,是否可以包含多个类?(除了匿名内部类),有什么限制? - 可以包含多个类 - 条件:其它类不能用private.public.prot ...
- Automatic WordPress Updates Using FTP/FTPS or SSH
Introduction When working with WordPress in a more secure environment where websites are not entirel ...
- Maven根据不同环境打包不同配置文件
开发项目时会遇到这个问题:开发环境,测试环境,生产环境的配置文件不同,打包时经常要手动更改配置文件,更改的少还可以接受,但是如果需要更多个配置文件,手动的方法就显得非常笨重了. 下面介绍一种方法,利用 ...
- Java工程师成神之路 转
一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http:/ ...
- C/C++ 函数指针 总结
什么是函数指针 就像某一变量的地址可以存储在相应的指针变量中一样,指向函数的指针中保存着函数代码起始处的地址 函数指针的声明 当声明一个函数指针时,必须声明它指向的函数类型.要指定函数类型,就要指出函 ...