接入百度语音SDK的步骤
1.导入依赖库
SystemConfiguration.framework
AudioToolbox.framework
UIkit.framework
AVFoundation.framework
Foundation.framework
libz.tbd
Security.framework
QuartzCore.framework
CoreText.framework
GLKit.framework
OpenGLES.framework
CoreLocation.framework
CFNetwork.framework
CoreGraphics.framework
注意还要导入依赖库:CoreTelephony.framework
2.需要包含的SDK文件有:
从开放平台下载的包里面的
Headers文件夹、Third Part文件夹、还有..resources文件夹(tone和scheme)、还有.a静态库文件
3.将工程的bitcode设置为NO
4.build Setting里面设置other linker flags为-ObjC
示例Demo:
#import "ViewController.h"
#import "BDVoiceRecognitionClient.h"
@interface ViewController ()<MVoiceRecognitionClientDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
//取消监听语音音量
[[BDVoiceRecognitionClient sharedInstance] cancelListenCurrentDBLevelMeter];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)inputBtnClick:(id)sender {
BDVoiceRecognitionClient * client = [BDVoiceRecognitionClient sharedInstance];
[client setApiKey:@"Au2wN2SaDOpYZHgGqrIymMkU" withSecretKey:@"a0212d1fa0f28699aa5d1162a1bcbf1c"];
//设置识别垂类
//[client setPropertyList:@[[NSNumber numberWithInt:EVoiceRecognitionPropertyVideo]]];
//设置识别语言为普通话
[client setLanguage:EVoiceRecognitionPropertyMusic];
//禁用标点符号<默认不禁用>
[client disablePuncs:YES];
//设置是否对语音进行端点检测,即SDK会自动判断说话是否结束<默认开启>
[client setNeedVadFlag:YES];
//设置是否对上传的语音进行压缩<默认压缩>
[client setNeedCompressFlag:YES];
//设置在线识别的响应等待时间,如果超时,触发同步离线识别
[client setOnlineWaitTime:5];
//开启自然语言理解结果
[client setConfig:@"nlu" withFlag:YES];
//开始说话开始提示音
[client setPlayTone:EVoiceRecognitionPlayTonesRecStart isPlay:YES];
//开始说话结束提示音
[client setPlayTone:EVoiceRecognitionPlayTonesRecEnd isPlay:YES];
//打开语音音量功能
[client listenCurrentDBLevelMeter];
//获取当前语音音量级别
[client getCurrentDBLevelMeter];
int startStatus = [client startVoiceRecognition:self];
switch (startStatus) {
case EVoiceRecognitionStartWorking:
self.label.text = @"启动成功!";
break;
default:
self.label.text = [NSString stringWithFormat:@"启动失败 - 错误码:%d",startStatus];
break;
}
}
- (void)VoiceRecognitionClientWorkStatus:(int)aStatus obj:(id)aObj {
switch (aStatus) {
case EVoiceRecognitionClientWorkStatusFlushData: {
// 该状态值表示服务器返回了中间结果,如果想要将中间结果展示给用户(形成连续上屏的效果), // 可以利用与该状态同时返回的数据,每当接到新的该类消息应当清空显示区域的文字以免重复
NSMutableString *tmpString = [[NSMutableString alloc] initWithString:@""]; [tmpString appendFormat:@"%@",[aObj objectAtIndex:0]];
NSLog(@"result: %@", tmpString);
break; }
case EVoiceRecognitionClientWorkStatusFinish: {
// 该状态值表示语音识别服务器返回了最终结果,结果以数组的形式保存在 aObj 对象中 // 接受到该消息时应当清空显示区域的文字以免重复
if ([[BDVoiceRecognitionClient sharedInstance] getRecognitionProperty] != EVoiceRecognitionPropertyInput)
{
NSMutableArray *resultData = (NSMutableArray *)aObj; //解析结果,并显示
NSMutableString *tmpString = [[NSMutableString alloc] initWithString:@""];
// 获取识别候选词列表
for (int i=0; i<[resultData count]; i++) {
[tmpString appendFormat:@"%@\r\n",[resultData objectAtIndex:i]]; }
self.label.text = tmpString;
} else {
NSMutableString *sentenceString = [[NSMutableString alloc] initWithString:@""]; for (NSArray *result in aObj)// 此时 aObj 是 array,result 也是 array
{
// 取每条候选结果的第 条,进 组合
// result 的元素是 dictionary,对应 个候选词和对应的可信度
NSDictionary *dic = [result objectAtIndex:0];
NSString *candidateWord = [[dic allKeys] objectAtIndex:0];
[sentenceString appendString:candidateWord];
}
NSLog(@"result: %@", sentenceString);
}
break; }
case EVoiceRecognitionClientWorkStatusReceiveData: {
// 此状态只在输入模式下发生,表示语音识别正确返回结果,每个子句会通知一次(全量, // 即第二次收到该消息时所携带的结果包含第一句的识别结果),应用程序可以
// 逐句显示。配合连续上屏的中间结果,可以进一步 升语音输入的体验
NSMutableString *sentenceString = [[NSMutableString alloc] initWithString:@""];
for (NSArray *result in aObj)// 此时 aObj 是 array,result 也是 array
{
// 取每条候选结果的第 条,进 组合
// result 的元素是 dictionary,对应 个候选词和对应的可信度
NSDictionary *dic = [result objectAtIndex:0];
NSString *candidateWord = [[dic allKeys] objectAtIndex:0];
[sentenceString appendString:candidateWord];
}
NSLog(@"result: %@", sentenceString); break;
}
case EVoiceRecognitionClientWorkStatusNewRecordData: {
// 有音频数据输出,音频数据格式为 PCM,在有 WiFi 连接的条件下为 16k16bit,非 WiFi
// 为 8k16bit break;
}
case EVoiceRecognitionClientWorkStatusEnd: {
// 用户说话完成,但服务器尚未返回结果
break; }
case EVoiceRecognitionClientWorkStatusCancel: {
// 用户主动取消
break; }
case EVoiceRecognitionClientWorkStatusError: {
// 错误状态
self.label.text = @"没有语音输入";
break; }
case EVoiceRecognitionClientWorkPlayStartTone:
case EVoiceRecognitionClientWorkPlayStartToneFinish:
case EVoiceRecognitionClientWorkStatusStartWorkIng:
case EVoiceRecognitionClientWorkStatusStart:
case EVoiceRecognitionClientWorkPlayEndToneFinish:
case EVoiceRecognitionClientWorkPlayEndTone:
break;
}
}
接入百度语音SDK的步骤的更多相关文章
- BaiduSpeechDemo【百度语音SDK集成】(基于v3.0.7.3)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo将百度语音SDK(其中一部分功能)和自定义的UI对话框封装到一个module中,便于后续的SDK版本更新以及调用. 本De ...
- BaiduSpeechDemo【百度语音SDK集成】(基于v3.0.8.1)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 上一篇集成的是V3.0.7.3版本的SDK<BaiduSpeechDemo[百度语音SDK集成](基于v3.0.7.3)> ...
- 关于几个主流语音SDK的接入问题
这两周都在忙着游戏上线还有接入游戏语音,两周分别接了腾讯语音和百度语音!!! 关于腾讯语音的一些问题 由于发现腾讯语音的在录完音频后的数据是编过码的所以出现了一些问题: *不能解码(腾讯方不提供解码算 ...
- Android接入百度自动更新SDK
一:前言 公司的app,上传到百度应用市场,然后说必须要接入百度的自动更新sdk才能上架,于是从百度官网上去下载jar包,下载的时候必须要带上数据统计,如果使用自动的jar包,还需要带上广告联盟,坑爹 ...
- iOS百度地图SDK集成详细步骤
1.iOS百度地图下载地址 http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download 根据需要选择不同的版本 ...
- Android 通过调用系统,如接口 谷歌语音、百度语音、科大讯飞语音等语音识别方法对话框
现在app在发展过程中会集成一些语音识别功能,不具有其自己的显影剂一般正在开发的语音识别引擎,所以在大多数情况下,它是选择一个成熟的语音识别引擎SDK集成到他们的app在. 平时,这种整合被分成两个, ...
- GJM:Unity导入百度地图SDK [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- 利用百度语音API进行语音识别。
由于项目需要,这几天都在试图利用百度语音API进行语音识别.但是识别到的都是“啊,哦”什么的,我就哭了. 这里我只是分享一下这个过程,错误感觉出现在Post语音数据那一块,可能是转换问题吧. API请 ...
- cocos2d-x + Lua接入iOS原生SDK的实现方案[转]
相信很多朋友在使用cocos2d-x+lua开发游戏时都遇到过接入iOS原生SDK的问题,比如常见的接应用内支付SDK,广告SDK或是一些社交平台SDK等等,我也没少接过这类SDK.这篇文章主要是对我 ...
随机推荐
- Jmeter组件8. BeanShell Sampler
BeanShell是一个小巧免费的JAVA源码解释器,支持对象式的脚本语言特性,亦可嵌入到JAVA源代码中,能动态执行JAVA源代码并为其扩展了脚本语言的一些特性,像JavaScript和perl那样 ...
- 简单的java socket 示例
一.搭建服务器端 a).创建ServerSocket对象绑定监听端口. b).通过accept()方法监听客户端的请求. c).建立连接后,通过输入输出流读取客户端发送的请求信息. d).通过输出流向 ...
- HTML5移动端图片上传模块
上传图片的功能是极为常用的,之前做过一个移动端上传文件的功能(基于jquery的),总结梳理一下. html <div class="uploadPic clearBox"& ...
- MySQL For Windows Zip解压版安装
前言 Windows 下 MySQL 有msi和zip解压安装版两种,而zip版只需解压并做简单配置后就能使用,我个人比较喜欢这种方式. 注意我们这里说的MySQL是指MySQL服务器,有很多初学的同 ...
- 转 LoadRunner 技巧之协议分析
在做性能测试的时候,协议分析是困扰初学者的难题,选择错误的协议会导致Virtual User Generator 录制不到脚本:或录制的脚本不完整,有些应用可能需要选择多个协议才能完整的记录 客户端与 ...
- win10 剪贴板 拒绝访问
win10 Cannot open clipboard:拒绝访问.
- 00904. 00000 - "%s: invalid identifier"
SELECT * FROM table name WHERE STRING_VALUE like '%Britaney Searing%' ORDER BY COMPOSITE_INSTANCE_ID ...
- 9.1 js基础总结2
3.布尔类型(Boolean) 布尔型数据只有true和false两个值,与字符串不同,不要把布尔值用引号括起来,布尔值false与字符串“false”是两回事. var married = true ...
- PHP抓取及分析网页的方法详解
本文实例讲述了PHP抓取及分析网页的方法.分享给大家供大家参考,具体如下: 抓取和分析一个文件是非常简单的事.这个教程将通过一个例子带领你一步一步地去实现它.让我们开始吧! 首先,我首必须决定我们将抓 ...
- 【原】无规矩,不方圆——说一说正则里的exec()和test()
今天一大早遇就遇到一件诡异的事儿,可能是思绪还没有澄静下来,一下子没反应过来.事情是这样的: 模板: <input class="name" type="text& ...