android免费离线讯飞语音合成
前言:目前市面上的语音合成平台有很多,讯飞,百度等等。目前使用讯飞tts语音合成。
语音合成分为方式:
一、使用讯飞语音开放平台在线语音合成SDK。
优点:免费,有统计数据,发音人种类贼多。
缺点:合成次数限制,装机量限制。免费版有时候因为网络因素会有延迟,次数没通过审核前<500次/天,装机量有限,需要 提交引用审核方可提升至<2w次/天。审核要求是应用界面有讯飞语音技术支持。
二、使用讯飞语音开放平台离线语音合成SDK。
优点:快,无延迟。
缺点:收费。。。。
三、使用讯飞语记apk,进行语音合成。
优点:快,免费,无延迟,无装机量限制,无合成次数限制。
缺点:需要在安卓设备上安装讯飞语记apk,然后在开发者的应用中 调用讯飞语记的tts引擎。
前言总结:
使用讯飞语记实现语音语音合成的好处:免费,不受制网络传输速度,发音人选择种类多,不限装机量,不限合成次数。
实现过程:在自己的应用程序中,调用讯飞语记.apk来进行合成。下载地址:讯飞语记.apk
使用讯飞语记的步骤:
一、在自己的工程里加入jar包(sunflower.jar & Msc.jar )和各个so库,下载demo。
二、在工程里加入代码:
1.初始化讯飞sdk:
①在自己的application中加入初始化讯飞sdk代码。
private void initItfly(){ // 应用程序入口处调用,避免手机内存过小,杀死后台进程后通过历史intent进入Activity造成 //SpeechUtility对象为null// 注意:此接口在非主进程调用会返回null对象,如需在非主进程使用语音功能,请增加参数: //SpeechConstant.FORCE_LOGIN+"=true"// 参数间使用“,”分隔。// 设置你申请的应用appid// 注意: appid 必须和下载的SDK保持一致,否则会出现10407错误StringBuffer param = new StringBuffer();param.append("appid=" + getString(R.string.app_id));// param.append("appid=" + "11111111");// param.append(",");// 设置使用v5+// param.append(SpeechConstant.ENGINE_MODE + "=" + SpeechConstant.MODE_MSC);SpeechUtility utility = SpeechUtility.createUtility(this, param.toString());try {mSpeechSynthesizerUtil = new SpeechSynthesizerUtil(getApplicationContext());} catch (Exception e) {}
}
②创建工具类 SpeechSynthesizerUtil。
/*** Created by Kai .* time on 2017/3/20.* design:语音合成工具类*/
public class SpeechSynthesizerUtil {// 语音合成对象public SpeechSynthesizer mTts;// 默认云端发音人public static String voicerCloud = Constants.VOICERCLOUD;// // 云端发音人列表
// private String[] cloudVoicersEntries;// 引擎类型private String mEngineType = SpeechConstant.TYPE_LOCAL;private SharedPreferences mSharedPreferencesSpeech;//缓冲进度private int mPercentForBuffering = 0;//播放进度private int mPercentForPlaying = 0;private Context mContext;public SpeechSynthesizerUtil(Context context) {this.mContext = context;// 初始化合成对象/*** 初始化监听。*/InitListener mTtsInitListener = new InitListener() {@Overridepublic void onInit(int code) {Util.LogUtil.d("InitListener init() code = " + code);if (code != ErrorCode.SUCCESS) {ToastUtil.showToast("初始化失败,错误码:" + code);} else {// 初始化成功,之后可以调用startSpeaking方法// 注:有的开发者在onCreate方法中创建完合成对象之后马上就调用startSpeaking进行合成,// 正确的做法是将onCreate中的startSpeaking调用移至这里}}};mTts = SpeechSynthesizer.createSynthesizer(context, mTtsInitListener);
// 这里使用讯飞语记合成,就把下面设置参数的代码全注释掉。如果使用讯飞别的方式合成就别注释
// mSharedPreferencesSpeech = context.getSharedPreferences(Constants.PREFER_NAME, Activity.MODE_PRIVATE);// 设置参数// TODO:待取消注释代码
// Util.setSpeechParam(mTts, mEngineType, mContext, mSharedPreferencesSpeech);}/*** 开始合成*/public void startSpeech(String speakContent, OnCompletedListener onCompletedListener) {setOnCompletedListener(onCompletedListener);int code = mTts.startSpeaking(speakContent, mTtsListener);
// /**
// * 只保存音频不进行播放接口,调用此接口请注释startSpeaking接口
// * text:要合成的文本,uri:需要保存的音频全路径,listener:回调接口
// */
// String path = Environment.getExternalStorageDirectory()+"/tts.pcm";
// int code = mTts.synthesizeToUri(text, path, mTtsListener);if (code != ErrorCode.SUCCESS) {if (code == ErrorCode.ERROR_COMPONENT_NOT_INSTALLED) {ToastUtil.showToast("没有安装语音+ code = " + code);} else {ToastUtil.showToast("语音合成失败,错误码: " + code);}}}/*** 开始合成*/public void startSpeech(String speakContent, SynthesizerListener listener) {int code = mTts.startSpeaking(speakContent, listener);// /**// * 只保存音频不进行播放接口,调用此接口请注释startSpeaking接口// * text:要合成的文本,uri:需要保存的音频全路径,listener:回调接口// */// String path = Environment.getExternalStorageDirectory()+"/tts.pcm";// int code = mTts.synthesizeToUri(text, path, mTtsListener);if (code != ErrorCode.SUCCESS) {if (code == ErrorCode.ERROR_COMPONENT_NOT_INSTALLED) {ToastUtil.showToast("没有安装语音+ code = " + code);} else {ToastUtil.showToast("语音合成失败,错误码: " + code);}}}//注册合成完毕后的监听事件private OnCompletedListener mOnCompletedListener;public void setOnCompletedListener(OnCompletedListener mOnCompletedListener) {this.mOnCompletedListener = mOnCompletedListener;}public interface OnCompletedListener {void OnCompleted();}/*** 合成回调监听。*/public SynthesizerListener mTtsListener = new SynthesizerListener() {@Overridepublic void onSpeakBegin() {Util.LogUtil.i("开始播放");}@Overridepublic void onSpeakPaused() {Util.LogUtil.i("暂停播放");}@Overridepublic void onSpeakResumed() {Util.LogUtil.i("继续播放");}@Overridepublic void onBufferProgress(int percent, int beginPos, int endPos,String info) {// ToastUtil.showToast(mContext,String.format(mContext.getString(R.string.tts_toast_format),}@Overridepublic void onSpeakProgress(int percent, int beginPos, int endPos) {// 播放进度mPercentForPlaying = percent;}@Overridepublic void onCompleted(SpeechError error) {if(mOnCompletedListener!=null)mOnCompletedListener.OnCompleted();if (error == null) {} else if (error != null) {ToastUtil.showToast(error.getPlainDescription(true));}}@Overridepublic void onEvent(int eventType, int arg1, int arg2, Bundle obj) {// 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因// 若使用本地能力,会话id为null// if (SpeechEvent.EVENT_SESSION_ID == eventType) {// String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);// Log.d(TAG, "session id =" + sid);// }}};}
2.判断本安卓设备是否下载讯飞语记录,没有就去下载。
//判断本机是否安装了讯飞语记if (!SpeechUtility.getUtility().checkServiceInstalled()) {//未安装String url = SpeechUtility.getUtility().getComponentUrl();Uri uri = Uri.parse(url);Intent it = new Intent(Intent.ACTION_VIEW, uri);startActivity(it);}else {//已安装,开始合成TODO:}
3.语音合成代码。
/**
* 第二个参数如果不想监听说话完毕的状态就传null,想监听就实现这个接口
*/
SampleApplication.getSpeechSynthesizerUtil().startSpeech("说话",this);
三、打开讯飞语记,设置自己喜欢的发音人,设置tts引擎。
通用设置-->语音合成设置-->
android免费离线讯飞语音合成相关推荐
- Android 讯飞语音合成
. . 首先,需要先去科大讯飞官网申请帐号,以及创建应用,创建应用后可以进入我的应用查看APPID,并开通"讯飞语音合成"服务.然后下载对应的SDK,并进行以下步骤 http:// ...
- 讯飞语音合成andriod版本
目录直达 1.成员变量声明 2.参数设置 3.获取离线资源 4.语音合成监听 5.调用方法合成语音 6.在onCreate中初始化合成对象 7.添加一个按钮 8.按钮按下监听 在离线命令的基础上,我们 ...
- uniapp使用讯飞语音合成
uniapp使用讯飞语音合成 封装: // A code block var foo = 'bar'; var receiver = plus.android.implements('com.ifly ...
- 讯飞语音合成 下载音频Java Demo
注册讯飞账号 略 实名认证 略 创建应用 添加语音合成服务 进入控制台,点击我的应用,然后添加语音合成服务(免费),并记下APPID 下载SDK 点击应用右侧的SDK下载 你将会下载到一个压缩包: 解 ...
- 讯飞语音合成和百度语音合成,粘贴就能用
XFAudioComp 脚本中包含连接讯飞相关方法(其中讯飞使用Websocket 我使用的 BestHttp插件,插件在我资源里可以找到) using BestHTTP.WebSocket; u ...
- 讯飞语音合成 发音不准确怎么解决
讯飞语音合成发音不准确怎么解决 替换要朗读文本中的容易读错的字符 首先讯飞语音合成我们是无法控制的,我们能控制的之后是自己传给他的文本.为了朗读效果,我这里通过替换掉一些容易读错的字符,加入空白符等方 ...
- 让计算机开口说话教案,生活创客系列教学设计:第十三节 利用讯飞语音合成技术让掌控板开口说话 —掌控板与讯飞语音合成...
一.项目内容 项目背景:在同学们的作品中,都用到了物联网.同学们又提出了问题:联网后,同伴发来了文字信息,但我们不可能长期看着掌控板的屏幕,咋办?能否让掌控板把文字朗读出来? 可以!今天,我们就一起尝 ...
- android 语音识别 之 讯飞话音移植
http://www.myexception.cn/android/1166876.html android 语音识别 之 讯飞语音移植 一.简介 语音识别现在应用越来越广泛了 比如语音写短信.语音搜 ...
- Android应用开发接入讯飞语音合成
前言: 在日常的生活中免不了要有一些指定的文字需要手机帮我们读出来,那这个时候我就需要考虑到怎么样才能让手机帮我们读出来呢? 实现的方法: 接下来我来说说实现的方法以及步骤,我们都知道Android原 ...
- android studio中讯飞sdk“组件未安装.(错误码:21002)”的解决办法
最近学习了一下讯飞android版的sdk,在按照官方文档上的步骤在android studio中导入sdk后,初始化遇到了这个问题.后来知道是gradle中jniLibs配置的问题,解决办法有两个: ...
最新文章
- 组件(2):使用Prop下发数据
- python语言实战-Python实战-从菜鸟到大牛的进阶之路 pdf完整版
- 科大星云诗社动态20210224
- 多种缺陷管理软件简介
- 三级菜单 python_python三级菜单
- Mysql数据库的简单介绍
- Netty学习笔记(六) 简单的聊天室功能之WebSocket客户端开发实例
- 倒计时 妙味课堂_jQuery实现倒计时(倒计时年月日可自己输入)
- eclipse-indigo 中 user libraries 自动部署 WEB-INF/lib 配置
- android 分包粘包_Android Socket 发送与接收数据问题处理: 发送后的数据接收到总是粘包...
- schema的详解2
- 【Leetcode】数学题(Python)
- linux的使用 --- 虚拟机创建CentOS(Intel VT-X)
- python基本语法总结(超级全面,细致,只用一周就可以入门python到实践),会持续更新
- 计算机网络密码用户名是什么,宽带连接的用户名和密码是什么
- Cannot resolve MVC View
- [我也GitHub]我很焦虑, 我很暴躁!
- 浅谈umi router
- 出现“你的Windows许可证即将过期”提示
- 漂亮学姐计算机软考【认证】通过了的学习方法和小技巧