前言:目前市面上的语音合成平台有很多,讯飞,百度等等。目前使用讯飞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免费离线讯飞语音合成相关推荐

  1. Android 讯飞语音合成

    . . 首先,需要先去科大讯飞官网申请帐号,以及创建应用,创建应用后可以进入我的应用查看APPID,并开通"讯飞语音合成"服务.然后下载对应的SDK,并进行以下步骤 http:// ...

  2. 讯飞语音合成andriod版本

    目录直达 1.成员变量声明 2.参数设置 3.获取离线资源 4.语音合成监听 5.调用方法合成语音 6.在onCreate中初始化合成对象 7.添加一个按钮 8.按钮按下监听 在离线命令的基础上,我们 ...

  3. uniapp使用讯飞语音合成

    uniapp使用讯飞语音合成 封装: // A code block var foo = 'bar'; var receiver = plus.android.implements('com.ifly ...

  4. 讯飞语音合成 下载音频Java Demo

    注册讯飞账号 略 实名认证 略 创建应用 添加语音合成服务 进入控制台,点击我的应用,然后添加语音合成服务(免费),并记下APPID 下载SDK 点击应用右侧的SDK下载 你将会下载到一个压缩包: 解 ...

  5. 讯飞语音合成和百度语音合成,粘贴就能用

    XFAudioComp 脚本中包含连接讯飞相关方法(其中讯飞使用Websocket  我使用的  BestHttp插件,插件在我资源里可以找到) using BestHTTP.WebSocket; u ...

  6. 讯飞语音合成 发音不准确怎么解决

    讯飞语音合成发音不准确怎么解决 替换要朗读文本中的容易读错的字符 首先讯飞语音合成我们是无法控制的,我们能控制的之后是自己传给他的文本.为了朗读效果,我这里通过替换掉一些容易读错的字符,加入空白符等方 ...

  7. 让计算机开口说话教案,生活创客系列教学设计:第十三节 利用讯飞语音合成技术让掌控板开口说话 —掌控板与讯飞语音合成...

    一.项目内容 项目背景:在同学们的作品中,都用到了物联网.同学们又提出了问题:联网后,同伴发来了文字信息,但我们不可能长期看着掌控板的屏幕,咋办?能否让掌控板把文字朗读出来? 可以!今天,我们就一起尝 ...

  8. android 语音识别 之 讯飞话音移植

    http://www.myexception.cn/android/1166876.html android 语音识别 之 讯飞语音移植 一.简介 语音识别现在应用越来越广泛了 比如语音写短信.语音搜 ...

  9. Android应用开发接入讯飞语音合成

    前言: 在日常的生活中免不了要有一些指定的文字需要手机帮我们读出来,那这个时候我就需要考虑到怎么样才能让手机帮我们读出来呢? 实现的方法: 接下来我来说说实现的方法以及步骤,我们都知道Android原 ...

  10. android studio中讯飞sdk“组件未安装.(错误码:21002)”的解决办法

    最近学习了一下讯飞android版的sdk,在按照官方文档上的步骤在android studio中导入sdk后,初始化遇到了这个问题.后来知道是gradle中jniLibs配置的问题,解决办法有两个: ...

最新文章

  1. 组件(2):使用Prop下发数据
  2. python语言实战-Python实战-从菜鸟到大牛的进阶之路 pdf完整版
  3. 科大星云诗社动态20210224
  4. 多种缺陷管理软件简介
  5. 三级菜单 python_python三级菜单
  6. Mysql数据库的简单介绍
  7. Netty学习笔记(六) 简单的聊天室功能之WebSocket客户端开发实例
  8. 倒计时 妙味课堂_jQuery实现倒计时(倒计时年月日可自己输入)
  9. eclipse-indigo 中 user libraries 自动部署 WEB-INF/lib 配置
  10. android 分包粘包_Android Socket 发送与接收数据问题处理: 发送后的数据接收到总是粘包...
  11. schema的详解2
  12. 【Leetcode】数学题(Python)
  13. linux的使用 --- 虚拟机创建CentOS(Intel VT-X)
  14. python基本语法总结(超级全面,细致,只用一周就可以入门python到实践),会持续更新
  15. 计算机网络密码用户名是什么,宽带连接的用户名和密码是什么
  16. Cannot resolve MVC View
  17. [我也GitHub]我很焦虑, 我很暴躁!
  18. 浅谈umi router
  19. 出现“你的Windows许可证即将过期”提示
  20. 漂亮学姐计算机软考【认证】通过了的学习方法和小技巧

热门文章

  1. php 计算壬子,壬子日是哪一天,壬子日怎么算
  2. Android 获取Device Id
  3. 仙剑5手游服务器维护,仙剑奇侠传手游5月27日例行维护与活动公告
  4. 微软造的还原精灵EWF(Enhanced Write Filter)
  5. C语言嵌入式系统编程修炼之道
  6. 微信开发工具更新后,跳转页面报错
  7. 火车头采集器AI伪原创v.2.3
  8. tensorflow使用较为底层的方式复现VGG16
  9. linux 搜索FC存储设备,Linux FC-SAN存储搭建
  10. 动手学深度学习(第六章 循环神经网络)