iOS下如何微信语音识别接口开发,可否有API接口

iOS 上语音输入 Google Speech API
做iOS开发已经两年多了。最近,在整理以前的代码,找到当时卡壳的一些代码片段,写博客跟大家分享一下。欢迎iOS初学者订阅我的博客,有什么问题可以留言交流。以下正文:
实现应用内语音输入,可以使用Google语音识别引擎(Google Speech API),只讲个思路,自己实践
/speech-api/v1/recognize?xjerr=1&lang=zh-CN&maxresults=1
使用AVAudioRecorder录音保存到本地,然后通过HTTP请求将录音文件POST出去,lang=zh-CN是普通话,zh-HK是粤语,也可以换其他语言。
然后等待服务器响应,回过来JSON格式的数据,会把文字传回来。
只提供思路,欢迎评论讨论。API请求方式及参数基本说明
格式支持:pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式);8k/16k 采样率 16bit 位深的单声道。系统支持语言种类:中文(zh)、粤语(ct)、英文(en)
目前 API 仅支持整段语音识别的模式,即需要上传完整语音文件进行识别。文件大小不超过10M,时长不超过60s语音数据上传POST方式有两种:隐示发送和显示发送正式地址:amr文件样例:
语音上传,隐示发送语音数据和其他参数通过标准 JSON 格式串行化 POST 上传, JSON 里包括的参数:
语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写
采样率,支持 8000 或者 16000
声道数,仅支持单声道,请填写固定值 1
用户唯一标识,用来区分用户,计算UV值。建议填写能区分用户的机器 MAC 地址或 IMEI 码,长度为60字符以内。
开放平台获取到的开发者n
语种选择,默认中文(zh)。 中文=zh、粤语=ct、英文=en,不区分大小写。
语音下载地址,与callback连一起使用,确保百度服务器可以访问
识别结果回调地址,确保百度服务器可以访问
真实的语音数据 ,需要进行base64 编码。与len参数连一起使用。
原始语音长度,单位字节
(speech, len) 及 (url, callback) 这两组参数必须二选一,如果都填,默认处理第一种。 建议使用(speech, len)。
(speech, len): 开发者可以将语音文件进行base64编码,放在 “speech”字段中。并将语音数据的原始长度,填写“len”字段;
(url, callback):或者直接提供语音下载地址, 放在“url”字段中,并将识别结果的回调地址,放在“callback”参数中。
callback 回调以post的方式传入类似以下json结果:
{"corpus_no":"0997779","err_msg":"success.","err_no":0,"result":["北京科技馆,"],"sn":""}上传实例(speech, len 参数),如使用(url, callback)请忽略此段 :Content-Type:application/json
"format":"speex",
"rate":8000,
"channel":1,
"token":xxx,
"cuid":"baidu_workshop",
"len":4096,
"speech":"xxx",}
返回示例: {"corpus_no":"0997779","err_msg":"success.","err_no":0,"result":["北京科技馆,"],"sn":""}注意事项:len 字段表示原始语音长度,不是 base64 编码之后的长度。
上传实例(url, callback参数) ,如使用(speech, len)请忽略此段:url和callback 请确认是公网ip或者域名,确保百度服务器可以访问。使用这种方式, 用户先向百度服务器发送一个请求。百度服务器收到这个请求,下载url参数中的音频文件进行识别。完成处理后,百度服务器会向callback里的地址,发起一个POST请求。
url中填写可以识别的音频文件地址,如 ,
根据这个地址,百度服务器会自动下载音频文件。callback, 填写回调地址,如 百度服务器会对这个地址发起http POST 请求,内容为json字符串。
Content-Type: application/json
"format": "pcm",
"rate": 16000,
"channel": 1,
"token": "24.fabaf05b0e73cad4a0..6711",
"cuid": "aip-cxy",
"url": "/res/16k_test.pcm",
"callback": "/post-dump.php"}
返回示例:{
"err_msg": "success. ",
"err_no": 0,
在callback中地址可以接受到如下post数据:注意callback 回调内容里的sn和之前识别请求返回的sn是一致的。
{"corpus_no":"","err_msg":"success.","err_no":0,"result":["北京科技馆,"],"sn":""}
语音上传,显示发送语音数据直接放在 HTTP-BODY 中,控制参数以及相关统计信息通过 header和url里参数传递。
string(格式见下面示例)
语音格式,pcm 或者 wav 或者 amr。不区分大小写
int(格式见下面示例)
采样率,支持 8000 或者 16000
语音数据的采样率和压缩格式在 HTTP-HEADER 里的Content-Type 表明,例:Content-Type: audio/amr;rate=8000
url参数说明:
用户唯一标识,用来区分用户,计算UV值。建议填写能区分用户的机器 MAC 地址或 IMEI 码,长度为60字符以内。
开放平台获取到的开发者
语种选择,中文=zh、粤语=ct、英文=en,不区分大小写,默认中文
URL 示例:http:///server_api?lan=zh&cuid=***&token=***
接口返回参数两种上传方式都返回统一的结果,采用 JSON 格式封装,如果识别成功,识别结果放在 JSON的“result”字段中,统一采用 utf-8 方式编码。
错误码描述
语音数据唯一标识,系统内部产生。如果反馈及debug请提供sn。
array ( [string,string,…])
识别结果数组,提供1-5 个候选结果, 优先使用第一个结果。utf-8 编码。
识别成功返回 case{"err_no":0,"err_msg":"success.","corpus_no":"","sn":"481D633F-73BA-726F-49EF-8659ACCC2F3D","result":["北京天气"]}
识别错误返回 case{"err_no":2000,"err_msg":"data empty.","sn":"481D633F-73BA-726F-49EF-8659ACCC2F3D"}
错误码解释见
测试demo请申请应用后,至 上下载语音REST API示例代码
一些简单的demo 有JAVA PHP 和C++RestApi SDK 下载
:: rest api 的完整封装,有 JAVA PHP Python Nodejs 和 C#
(C)&版权所有&2016&Baidu&京ICP证030173号
开发者支持
&&|&&&&|&&
QQ群:①(已满)
②(已满) ③商务合作:& OpenEars,用于在ios实现语音识别功能
秒后自动跳转到登录页
快捷登录:
举报类型:
不规范:上传重复资源
不规范:标题与实际内容不符
不规范:资源无法下载或使用
其他不规范行为
违规:资源涉及侵权
违规:含有危害国家安全等内容
违规:含有反动/色情等内容
违规:广告内容
详细原因:
任何违反下载中心规定的资源,欢迎Down友监督举报,第一举报人可获5-10下载豆奖励。
视频课程推荐
OpenEars,用于在ios实现语音识别功能
上传时间:
技术分类:
资源评价:
(2位用户参与评价)
已被下载&19&次
OpenEars是一个开源的iOS类库,用于在iPhone和iPad实现语音识别功能。本demo利用此开源类库实现了简单的语音识别。可以识别:CHANGE、LEFT、RIGHT、FORWARD、BACKWARD、GO等英文,其他语素需要训练。 只能在真机中测试。打开demo后,点击开始按钮,然后对着手机说以上几个英文单词。注意发音要大声、清晰、准确一点,才能够识别。比如说“Change”,笑脸会变成哭脸,说“Left”,笑脸会移到右边
51CTO下载中心常见问题:
1.如何获得下载豆?
1)上传资料
2)评论资料
3)每天在首页签到领取
4)购买VIP会员服务,无需下载豆下载资源
5)更多途径:点击此处
2.如何删除自己的资料?
下载资料意味着您已同意遵守以下协议:
1.资料的所有权益归上传用户所有
2.未经权益所有人同意,不得将资料中的内容挪作商业或盈利用途
3.51CTO下载中心仅提供资料交流平台,并不对任何资料负责
4.本站资料中如有侵权或不适当内容,请邮件与我们联系()
5.本站不保证资源的准确性、安全性和完整性, 同时也不承担用户因使用这些资料对自己和他人造成任何形式的伤害或损失
相关专题推荐
Unity3D是一个让你轻松创作的多平台的
本专题为JavaME手机开发大全视频教程
就目前趋势来看,移动互联网的规模将
去年被Facebook收购的Instagram,最吸
Coding Together: Developing Apps f
本专题由关东升老师讲解,共15讲37课
最有含金量量的iOS培训教程,李明杰老
本专题为传智播客发布的iOS教学视频,
iOS 7是美国苹果公司开发的手机和[1]
本专题为传智播客最新推出的iOS开发进
本专题为关东升老师主讲的iPhone和iP
iOS 具有简单易用的界面、令人惊叹的
本专题为swift语言学习专题,内含有完
关于iPhone SDK和iPhone开发的基础教
iphone开发视频教程iphone开发视频教
本教程为IOS手机端控件级开发的全套视
意见或建议:
联系方式:
您已提交成功!感谢您的宝贵意见,我们会尽快处理百度语音识别开放平台SDK使用方法
我的图书馆
百度语音识别开放平台SDK使用方法
百度语音识别开放平台SDK使用方法
时间& 11:18:22
百度Android语音识别SDK分在线与离线两种,这篇文章介绍在线SDK的使用方法。
& & &在线SDK是以JAR包和动态链接库形式发布和使用,可以从百度开放云平台网站中下载SDK及使用说明文档。
点击管理控制台,选择
2、申请开启语音识别服务 ,选择媒体云---语音识别,点击申请开启服务,填写理由。
等待对接成功
3、使用语音识别SDK前的准备
& & & & 声明权限
&view plain
&&uses-permission&android:name=
"android.permission.RECORD_AUDIO"
&uses-permission&android:name= "android.permission.ACCESS_NETWORK_STATE"
&uses-permission&android:name= "android.permission.WRITE_EXTERNAL_STORAGE"
&uses-permission&android:name= "android.permission.INTERNET"
&uses-permission&android:name= "android.permission.READ_PHONE_STATE"
&uses-permission&android:name= "android.permission.WAKE_LOCK"
&uses-permission&android:name= "android.permission.ACCESS_FINE_LOCATION"
&uses-permission&android:name= "android.permission.ACCESS_COARSE_LOCATION"
&uses-permission&android:name= "android.permission.ACCESS_WIFI_STATE"
&/&&/span&&&
&4、语音识别
语音识别控件方式
&view plain
&(mDialog&==&
&||&mCurrentTheme&!=&Config.DIALOG_THEME)&{&&
&&&&&&&&&&&&&&&&&&&&mCurrentTheme&=&Config.DIALOG_THEME;&&
&&&&&&&&&&&&&&&&&&&& if
&(mDialog&!=&
&&&&&&&&&&&&&&&&&&&&&&&&mDialog.dismiss();&&
&&&&&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&&&&&Bundle&params&=& new
&Bundle();&&
&&&&&&&&&&&&&&&&&&&&params.putString(BaiduASRDigitalDialog.PARAM_API_KEY,&Constants.API_KEY);&&
&&&&&&&&&&&&&&&&&&&&params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY,&Constants.SECRET_KEY);&&
&&&&&&&&&&&&&&&&&&&&params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME,&Config.DIALOG_THEME);&&
&&&&&&&&&&&&&&&&&&&&mDialog&=& new
&BaiduASRDigitalDialog(
,&params);&&
&&&&&&&&&&&&&&&&&&&&mDialog.setDialogRecognitionListener(mRecognitionListener);&&
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&mDialog.getParams().putInt(BaiduASRDigitalDialog.PARAM_PROP,&Config.CURRENT_PROP);&&
&&&&&&&&&&&&&&&&mDialog.getParams().putString(BaiduASRDigitalDialog.PARAM_LANGUAGE,&&
&&&&&&&&&&&&&&&&&&&&&&&&Config.getCurrentLanguage());&&
&&&&&&&&&&&&&&&&mDialog.show();&&
识别对话框支持的参数定义在BaiduASRDigitalDialog中以PARAM_前缀的常量。列表如下:
PARAM_API_KEY
开放平台认证
PARAM_SECRET_KEY
开放平台认证Secret_key
PARAM_LANGUAGE
LANGUAGE_CHINESE
语种,取值定义在VoiceRecognitionConfig类中前缀为LANGUAGE_的常量
PARAM_PARTIAL_RESULTS
PARAM_NLU_ENABLE
是否语义解析。Prop为输入时暂不支持语义,请显示指定为其它领域。
PARAM_NLU_PARAMS
预留语义解析参数
PARAM_PROP
PROP_INPUT
领域参数,定义在VoiceRecognitionConfig类中前缀为PROP_的常量
PARAM_PORMPT_TEXT
“请说话”
对话框提示语
PARAM_PROMPT_SOUND_ENABLE
提示音,需要集成SDK包Raw文件夹的资源
PARAM_DIALOG_THEME
THEME_BLUE_LIGHTBG
样式。定义在前缀为THEME_的常量中
PARAM_TIPS
引导语列表
PARAM_SHOW_TIPS_ON_START
对话框弹出时首先显示引导语列表
PARAM_SHOW_TIP
识别启动3秒未检测到语音,随机出现一条引导语
PARAM_SHOW_HELP_ON_SILENT
静音超时后将“取消”按钮替换为“帮助”
设置回调方法,处理返回的结果
&view plain
mRecognitionListener&=&
&DialogRecognitionListener()&{&&
&&&&&&&&&&& @Override
&&&&&&&&&&& public
&onResults(Bundle&results)&{&&
&&&&&&&&&&&&&&&ArrayList&String&&rs&=&results&!=& null
&?&results&&
&&&&&&&&&&&&&&&&&&&&&&&.getStringArrayList(RESULTS_RECOGNITION)&:& null
&&&&&&&&&&&&&&& if
&&&&rs.size()&&&
&&&&&&&&&&&&&&&&&&&mResult.setText(rs.get( 0
&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&}&&
&&&&&&&};&&
首先需要配置语音识别引擎ASREngine的参数VoiceRecognitionConfig
&view plain
VoiceRecognitionConfig&config&=&
&VoiceRecognitionConfig();&&
&&&&&&&&&&&&&&&&config.setProp(Config.CURRENT_PROP);&&
&&&&&&&&&&&&&&&&config.setLanguage(Config.getCurrentLanguage());&&
&&&&&&&&&&&&&&&&config.enableVoicePower(Config.SHOW_VOL);& //&音量反馈。
&&&&&&&&&&&&&&&& if
&(Config.PLAY_START_SOUND)&{&&
&&&&&&&&&&&&&&&&&&&&config.enableBeginSoundEffect(R.raw.bdspeech_recognition_start);& //&设置识别开始提示音
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&& if
&(Config.PLAY_END_SOUND)&{&&
&&&&&&&&&&&&&&&&&&&&config.enableEndSoundEffect(R.raw.bdspeech_speech_end);& //&设置识别结束提示音
&&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&&&&&config.setSampleRate(VoiceRecognitionConfig.SAMPLE_RATE_8K);& //&设置采样率,需要与外部音频一致
然后启动识别
&view plain
&code&=&mASREngine.startVoiceRecognition(mListener,&config);&&
其中mListener是识别过程的回调,需要对其中的方法进行实现
&view plain
&&&&*&重写用于处理语音识别回调的监听器
&MyVoiceRecogListener&
implements
&VoiceClientStatusChangeListener&{&&
&&&&&&& @Override
&&&&&&& public
&onClientStatusChange(
&status,&Object&obj)&{&&
&&&&&&&&&&& switch
&(status)&{&&
&&&&&&&&&&& //&语音识别实际开始,这是真正开始识别的时间点,需在界面提示用户说话。
&&&&&&&&&&&&&&& case
&VoiceRecognitionClient.CLIENT_STATUS_START_RECORDING:&&
&&&&&&&&&&&&&&&&&&&isRecognition&=& true
&&&&&&&&&&&&&&&&&&&mHandler.removeCallbacks(mUpdateVolume);&&
&&&&&&&&&&&&&&&&&&&mHandler.postDelayed(mUpdateVolume,&POWER_UPDATE_INTERVAL);&&
&&&&&&&&&&&&&&&&&&&mControlPanel.statusChange(ControlPanelFragment.STATUS_RECORDING_START);&&
&&&&&&&&&&&&&&&&&&& break
&&&&&&&&&&&&&&& case
&VoiceRecognitionClient.CLIENT_STATUS_SPEECH_START:&
//&检测到语音起点
&&&&&&&&&&&&&&&&&&&mControlPanel.statusChange(ControlPanelFragment.STATUS_SPEECH_START);&&
&&&&&&&&&&&&&&&&&&& break
&&&&&&&&&&&&&&& //&已经检测到语音终点,等待网络返回
&&&&&&&&&&&&&&& case
&VoiceRecognitionClient.CLIENT_STATUS_SPEECH_END:&&
&&&&&&&&&&&&&&&&&&&mControlPanel.statusChange(ControlPanelFragment.STATUS_SPEECH_END);&&
&&&&&&&&&&&&&&&&&&& break
&&&&&&&&&&&&&&& //&语音识别完成,显示obj中的结果
&&&&&&&&&&&&&&& case
&VoiceRecognitionClient.CLIENT_STATUS_FINISH:&&
&&&&&&&&&&&&&&&&&&&mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);&&
&&&&&&&&&&&&&&&&&&&isRecognition&=& false
&&&&&&&&&&&&&&&&&&&updateRecognitionResult(obj);&&
&&&&&&&&&&&&&&&&&&& break
&&&&&&&&&&&&&&& //&处理连续上屏
&&&&&&&&&&&&&&& case
&VoiceRecognitionClient.CLIENT_STATUS_UPDATE_RESULTS:&&
&&&&&&&&&&&&&&&&&&&updateRecognitionResult(obj);&&
&&&&&&&&&&&&&&&&&&& break
&&&&&&&&&&&&&&& //&用户取消
&&&&&&&&&&&&&&& case
&VoiceRecognitionClient.CLIENT_STATUS_USER_CANCELED:&&
&&&&&&&&&&&&&&&&&&&mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);&&
&&&&&&&&&&&&&&&&&&&isRecognition&=& false
&&&&&&&&&&&&&&&&&&& break
&&&&&&&&&&&&&&& default
&&&&&&&&&&&&&&&&&&& break
&&&&&&&&&&&}&&
&&&&&&&}&&
&&&&&&& @Override
&&&&&&& public
&errorType,&
&errorCode)&{&&
&&&&&&&&&&&isRecognition&=& false
&&&&&&&&&&&mResult.setText(getString(R.string.error_occur,&Integer.toHexString(errorCode)));&&
&&&&&&&&&&&mControlPanel.statusChange(ControlPanelFragment.STATUS_FINISH);&&
&&&&&&&}&&
&&&&&&& @Override
&&&&&&& public
&onNetworkStatusChange(
&status,&Object&obj)&{&&
&&&&&&&&&&& //&这里不做任何操作不影响简单识别
&&&&&&&}&&
获得识别BDVRClient对象
&view plain
mASREngine&=&VoiceRecognitionClient.getInstance(
&&&&&&&&mASREngine.setTokenApis(Constants.API_KEY,&Constants.SECRET_KEY);&&
请求参数设置
每次识别需要通过通过VoiceRecognitionConfig设置参数,其中一些方法在API中有说明
enableBeginSoundEffect
&soundResourceId 启动提示音资源Id
设置开始提示音,soundResourceId为放置在Raw文件夹的资源Id。
enableEndSoundEffect
&soundResourceId 说话结束提示音资源Id
检测到用户说话结束播报的提示音,非识别结束
setSampleRate
rate 采样率
设置音频采样率,
通常建议开发者 不指定
采样频率,由BDVRClient自动根据当前网络环境选择采样频率。WiFi环境下将使用16kHz采样,移动网络下将使用8kHz采样,来节省流量。参考常量定义
SAMPLE_RATE_8K 8K采样率
SAMPLE_RATE_16K 16K采样率
开发者可以通过指定垂直分类来获取更精准的语音识别结果。
垂直分类目前支持地图,音乐,视频,APP,网址,开发者需要注意设定采样频率时只能在这五种垂直分类中选择。若指定其他分类,可能会影响识别结果的精度。参考PROP_前缀的常量定义。
setUseDefaultAudioSource
&useDefaultSource
设置是否使用缺省的录音。 如果不使用,用户需要调用VoiceRecognitionClient对象的feedAudioBuffer方法为识别器提供语音数据
启用语义解析,只在搜索模式起作用
getSampleRate
获取当前识别采样率
setLanguage
String Language
设置语种。目前支持的语种有中文普通话(LANGUAGE_CHINESE)、中文粤语(LANGUAGE_CANTONSE)、英文(LANGUAGE_ENGLISH)。
开始语音识别,BDVRClient在开始识别后,会启动录音、预处理、上传到服务器并获取识别结果。
&view plain
&code&=&mASREngine.startVoiceRecognition(mListener,&config);&&
&&&&&&&&&&&&&&& if
&(code&!=&VoiceRecognitionClient.START_WORK_RESULT_WORKING)&{&&
&&&&&&&&&&&&&&&&&&&mResult.setText(getString(R.string.error_start,&code));&&
&&&&&&&&&&&&&&&}&&&
取消语音识别
馆藏&23074
TA的最新馆藏
喜欢该文的人也喜欢

我要回帖

更多关于 科大讯飞语音识别接口 的文章

 

随机推荐