接入高德 SDK 遇到的问题 01:语音导航中科大讯飞在线语音合成次数限制
2018-01-02 15:40
519 查看
简书:https://www.jianshu.com/p/c4a2e5312ea1
需求:采用高德导航SDK实现路线导航,并且实现语音播报导航
问题:高德导航语音合成开发指南中,建议采用的科大讯飞在线语音合成存在次数限制,远远达不到生产环境的需求量
解决:采用百度离在线语音识别 Android SDK
当然得先初始化:
但是存在次数限制:
远远不够本公司产品的需求量,买套餐又有点小贵,没办法只能使用第三方的语音合成SDK。
其实是有初始次数限制的,但只要申请提高配额,就可以无限制合成:
只能去社区提问:
离在线融合SDK 不能下载 http://ai.baidu.com/forum/topic/show/497323
然后找到了这个下载地址:
http://bos.nj.bpc.baidu.com/v1/audio/Baidu-TTS-Android-2.3.2-2017-12-28.zip
然后呢,这个demo的SDK版本都没有我在百度 github上找到的百度语音示例demo版本新:
不过还好,我还沉浸于“机智的我居然想到去github找”的成就感中,没有发飙:
https://github.com/baidu/speech-samples
接入流程:百度语音文档中心 + 百度语音示例demo
ps:接入百度语音SDK后还没有出现什么问题,不过高德+百度的组合…继续观察啦
需求:采用高德导航SDK实现路线导航,并且实现语音播报导航
问题:高德导航语音合成开发指南中,建议采用的科大讯飞在线语音合成存在次数限制,远远达不到生产环境的需求量
解决:采用百度离在线语音识别 Android SDK
一、科大讯飞语音合成使用次数有限
高德导航语音合成开发指南中,建议采用的科大讯飞在线语音合成,兼容性好,且使用简单,查看高德导航demo,在接入科大讯飞在线语音合成SDK后,只要一行代码就能实现语音合成播放:@Override public void onGetNavigationText(String s) { amapTTSController.onGetNavigationText(s); }
当然得先初始化:
// 科大讯飞在线语音合成初始化 // SpeechUtils.getInstance(this).speakText();系统自带的语音播报 amapTTSController = AmapTTSController.getInstance(getApplicationContext()); amapTTSController.init();
但是存在次数限制:
Dear: 感谢您致信和支持讯飞开放平台! 是的,您的应用集成上线前需要提交审核,审核通过后可提额到2万次/日的交互次数。 祝您工作愉快~
远远不够本公司产品的需求量,买套餐又有点小贵,没办法只能使用第三方的语音合成SDK。
二、百度语音合成无限制
应用需要先在百度云平台进行注册,后添加相关功能:其实是有初始次数限制的,但只要申请提高配额,就可以无限制合成:
三、接入百度离在线语音识别SDK
这里有个问题,离在线语音识别SDK总是下载到一半就断掉了,下载了N次都没有成功:只能去社区提问:
离在线融合SDK 不能下载 http://ai.baidu.com/forum/topic/show/497323
然后找到了这个下载地址:
http://bos.nj.bpc.baidu.com/v1/audio/Baidu-TTS-Android-2.3.2-2017-12-28.zip
然后呢,这个demo的SDK版本都没有我在百度 github上找到的百度语音示例demo版本新:
不过还好,我还沉浸于“机智的我居然想到去github找”的成就感中,没有发飙:
https://github.com/baidu/speech-samples
接入流程:百度语音文档中心 + 百度语音示例demo
1、引入jar包
2、引入库文件
3、设置权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
4、百度离在线语音合成初始化
/** * 百度离在线语音合成初始化 */ private void initialTts() { this.mSpeechSynthesizer = SpeechSynthesizer.getInstance(); this.mSpeechSynthesizer.setContext(this); this.mSpeechSynthesizer.setSpeechSynthesizerListener(this); // TODO 选择TtsMode.ONLINE 不需要设置以下参数; 选择TtsMode.MIX 需要设置下面2个离线资源文件的路径 // TODO 因为离线功能需要手动将assets目录下的3个dat文件复制到该目录,大大增加了app大小,所以建议不采用 // 文本模型文件路径 (离线引擎使用), 注意TEXT_FILENAME必须存在并且可读 // this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_TEXT_MODEL_FILE, mSampleDirPath + "/" + TEXT_MODEL_NAME); // 声学模型文件路径 (离线引擎使用), 注意TEXT_FILENAME必须存在并且可读 // this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_SPEECH_MODEL_FILE, mSampleDirPath + "/" + SPEECH_FEMALE_MODEL_NAME); // 本地授权文件路径,如未设置将使用默认路径.设置临时授权文件路径,LICENCE_FILE_NAME请替换成临时授权文件的实际路径,仅在使用临时license文件时需要进行设置,如果在[应用管理]中开通了正式离线授权,不需要设置该参数,建议将该行代码删除(离线引擎) // 如果合成结果出现临时授权文件将要到期的提示,说明使用了临时授权文件,请删除临时授权即可。 // 临时授权文件。目前SDK会自动下载正式授权文件。正式授权文件有效期3年,并在最后一个月SDK自动更新下载授权文件。 // this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_LICENCE_FILE, mSampleDirPath + "/" + LICENSE_FILE_NAME); // 请替换为语音开发者平台上注册应用得到的App ID (离线授权) this.mSpeechSynthesizer.setAppId("10611756"); // 请替换为语音开发者平台注册应用得到的apikey和secretkey (在线授权) this.mSpeechSynthesizer.setApiKey("DxQms5tV0PK0GPxPi7MxUvOi", "4xkoLSQOrfICDRmHqSmURFkPQVIx24TH"); // 发音人(在线引擎),可用参数为0,1,2,3。。。(服务器端会动态增加,各值含义参考文档,以文档说明为准。0--普通女声,1--普通男声,2--特别男声,3--情感男声。。。) this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0"); // 设置Mix模式的合成策略(MIX_MODE_DEFAULT:WIFI下在线优先;MIX_MODE_HIGH_SPEED_NETWORK:WIFI 4G 3G 2G下在线优先) // 如果在线连接百度服务器失败或者超时6s,那么切换成离线合成。 this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_MIX_MODE, SpeechSynthesizer.MIX_MODE_HIGH_SPEED_NETWORK); // 授权检测接口(只是通过AuthInfo进行检验授权是否成功。) // AuthInfo接口用于测试开发者是否成功申请了在线或者离线授权,如果测试授权成功了,可以删除AuthInfo部分的代码(该接口首次验证时比较耗时),不会影响正常使用(合成使用时SDK内部会自动验证授权) // 检查合成服务是否开通,如果只需要检查在线合成服务,使用 TtsMode.ONLINE /*AuthInfo authInfo = this.mSpeechSynthesizer.auth(TtsMode.ONLINE); if (authInfo.isSuccess()) { Toast.makeText(this, "语音合成成功", Toast.LENGTH_SHORT).show(); } else { String errorMsg = authInfo.getTtsError().getDetailMessage(); Toast.makeText(this, "语音合成成失败 errorMsg=" + errorMsg, Toast.LENGTH_SHORT).show(); }*/ // 初始化tts // 初始化离在线混合模式,如果只需要在线合成功能,使用 TtsMode.ONLINE // TtsMode.ONLINE 纯在线,断网即不可使用,TtsMode.MIX 离在线混合,断网或者网络请求超时使用离线。 mSpeechSynthesizer.initTts(TtsMode.ONLINE); }
5、语音播报
/** * 导航播报信息回调函数 */ @Override public void onGetNavigationText(String s) { /* * 如果需要合成后立即播放的请调用speak方法,如果只需要合成请调用synthesize方法 * 该接口线程安全,可以重复调用。内部采用排队策略,调用后将自动加入队列,SDK会按照队列的顺序进行合成及播放。 * 注意需要合成的每个文本text不超过1024的GBK字节,即512个汉字或英文字母数字。超过请自行按照句号问号等标点切分,调用多次合成接口。 * 调用这两个方法后,SDK会回调 SpeechSynthesizerListener 中的 onSynthesizeDataArrived 方法 * */ mSpeechSynthesizer.speak(s); Log.v("GetNavigationText导航信息", s); }
ps:接入百度语音SDK后还没有出现什么问题,不过高德+百度的组合…继续观察啦
相关文章推荐
- 接入高德 SDK 遇到的问题 02:导航SDK中的某些View不显示
- 使用科大讯飞语音SDK实现文字在线合成语音
- 接入高德 SDK 遇到的问题 03:2D地图获取路线总时间、总距离
- iOS开发小记:初次接入环信SDK3.0时遇到的问题及解决办法汇总
- 集成Android 科大讯飞免费在线语音合成播报功能(附源码)
- 高德地图之导航遇到的问题
- cocos2dx项目接入爱贝第三方支付sdk遇到的问题及解决方案
- 有关集成科大讯飞sdk的语音(三)语音合成
- android_用百度地图导航遇到没有语音问题
- unity接入讯飞语音识别iOS SDK的遇到的棘手问题!
- 总结几个今天接入SDK遇到的问题
- IOS 接入环信SDK3.0时遇到的问题
- android 微信 以及QQ的SDK接入分享功能遇到的些问题小结
- 科大讯飞 语音sdk 在linux 部署报20021的问题
- 关于几个主流语音SDK的接入问题
- 接入百度广告sdk遇到开屏广告黑屏和listView item高度不生效问题
- Unity接入友盟SDK后,添加打开安卓APP的功能 遇到的问题
- 关于接入科大讯飞的语音sdk
- UE4+科大讯飞SDK 语音转文字之字符串转码问题