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天期限), ...
随机推荐
- .NET Core改造工程直播
[背景] 新项目需要跨平台,原来积累的.NET类库需要改造为.NET Core. [直播] 新增加的项目不支持排除文件 不支持定义条件编译常量,虽然在项目中能使用#if语法,但无地方定义DefineC ...
- Markdown的简介(转)
欢迎使用 Cmd - 在线 Markdown 编辑阅读器 *我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人, Cmd Markdown 是我们给出的答案 -- ...
- [BZOJ5291][BJOI2018]链上二次求和(线段树)
感觉自己做的麻烦了,但常数似乎不算差.(只是Luogu最慢的点不到2s本地要跑10+s) 感觉我的想法是最自然的,但不明白为什么网上似乎找不到这种做法.(不过当然所有的做法都是分类大讨论,而我的方法手 ...
- 浅谈期望的线性性(可加性)【CodeForces280c】【bzoj3036】【bzoj3143】
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=63399955 向大(hei)佬(e)势力学(di ...
- hash课堂测试补分博客
题目要求: 开放地址法: 概念: 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入. 它的公式为: 解题过程(在下图中): 拉链法: ...
- [HNOI2008]玩具装箱
OJ题号: BZOJ1010 思路: 斜率优化动态规划. 由题意得状态转移方程为$f_i=\displaystyle{\min_{j=0}^{i-1}}\{f_j+\left(i-j-1+\displ ...
- 微信小程序 scroll-view隐藏横向滚动条
::-webkit-scrollbar { width: 0; height: 0; color: transparent; }
- WPF中删除打开过的图片
在WPF中,当我们删除打开过的图片时,往往会遇到"...无法删除,文件正在被另一个进程使用"的异常.即使当前文件是打开后关闭过的也不行. 这个问题的原因很简单,是因为WPF的缓存策 ...
- 用swift开发仪表盘控件(一)
苹果swift刚刚推出不久,接触到这个语言是一个偶然的机会,无聊之余随便看了下它的语法: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveW5tYW95b2 ...
- MVC之Ajax如影随行
一.Ajax的前世今生 我一直觉得google是一家牛逼的公司,为什么这样说呢?<舌尖上的中国>大家都看了,那些美食估计你是百看不厌,但是里边我觉得其实也有这样的一个哲学:关于食材,对于种 ...