有一个需求,需要把收到的交易信息推送朗诵出来。由于android没有自带的中文tts,所以采用第三方sdk,有两种方式,一种是离线方式,这种方式还需要下载讯飞的另外一个app,麻烦且不合适。第二种为在线方式语音合成,这里采用第二种。你会发现,如果交易信息很频繁的话,一段话还没读完,另一端话就开始了,而且讯飞这块貌似没做好,需要我们上层封装。

import android.content.Context;
import android.os.Bundle;
import android.util.Log;import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.SynthesizerListener;import java.util.ArrayList;
import java.util.List;/*** Created by Administrator on 2017/1/9.*/
public class TTSSpeech {private static String TAG = TTSSpeech.class.getSimpleName();private static class SingletonHolder {private static final TTSSpeech INSTANCE = new TTSSpeech();}public static final TTSSpeech getInstance(Context context) {if (!SingletonHolder.INSTANCE.isInit)SingletonHolder.INSTANCE.init(context);return SingletonHolder.INSTANCE;}// 语音合成对象private SpeechSynthesizer mTts;// 默认发音人private String voicer = "xiaoyan";private boolean isInit;private List queue;public TTSSpeech() {}public void init(Context context) {// 注意: appid 必须和下载的SDK保持一致,否则会出现10407错误SpeechUtility.createUtility(context, "appid=5872e9a8");// 初始化合成对象mTts = SpeechSynthesizer.createSynthesizer(context, mTtsInitListener);queue = new ArrayList();setParam();isInit = true;}/*** 初始化监听。*/private InitListener mTtsInitListener = new InitListener() {@Overridepublic void onInit(int code) {Log.d(TAG, "InitListener init() code = " + code);if (code != ErrorCode.SUCCESS) {} else {// 初始化成功,之后可以调用startSpeaking方法// 注:有的开发者在onCreate方法中创建完合成对象之后马上就调用startSpeaking进行合成,// 正确的做法是将onCreate中的startSpeaking调用移至这里}}};public void say(String content) {queue.add(content);if (!mTts.isSpeaking() && queue.size() == 1) {Log.d(TAG, "-------------->say:" + content);int code = mTts.startSpeaking(content, mTtsListener);if (code != ErrorCode.SUCCESS) {Log.e(TAG, "语音合成失败,错误码: " + code + " content:" + content);}}}/*** 合成回调监听。*/private SynthesizerListener mTtsListener = new SynthesizerListener() {@Overridepublic void onSpeakBegin() {Log.d(TAG, "-------------->onSpeakBegin");}@Overridepublic void onSpeakPaused() {Log.d(TAG, "-------------->onSpeakPaused");}@Overridepublic void onSpeakResumed() {}@Overridepublic void onBufferProgress(int percent, int beginPos, int endPos,String info) {// 合成进度}@Overridepublic void onSpeakProgress(int percent, int beginPos, int endPos) {// 播放进度}@Overridepublic void onCompleted(SpeechError speechError) {Log.d(TAG, "-------------->onCompleted");if (queue != null && queue.size() > 0) {queue.remove(0);if (queue.size() > 0) {int code = mTts.startSpeaking((String) queue.get(0), mTtsListener);if (code != ErrorCode.SUCCESS) {Log.e(TAG, "语音合成失败,错误码: " + code + " content:" + queue.get(0));}}}}@Overridepublic void onEvent(int eventType, int arg1, int arg2, Bundle obj) {Log.d(TAG, "-------------->onEvent");// 以下代码用于获取与云端的会话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);// }}};private void setParam() {// 清空参数mTts.setParameter(SpeechConstant.PARAMS, null);// 根据合成引擎设置相应参数mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);// 设置在线合成发音人mTts.setParameter(SpeechConstant.VOICE_NAME, voicer);//设置合成语速mTts.setParameter(SpeechConstant.SPEED, "50");//设置合成音调mTts.setParameter(SpeechConstant.PITCH, "50");//设置合成音量mTts.setParameter(SpeechConstant.VOLUME, "50");//设置播放器音频流类型mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");// 设置播放合成音频打断音乐播放,默认为truemTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");}public void destory() {queue.clear();mTts.stopSpeaking();// 退出时释放连接mTts.destroy();}
}
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TTSSpeech.getInstance(this).say("我是长江1号");TTSSpeech.getInstance(this).say("我是长江2号");TTSSpeech.getInstance(this).say("我是长江3号");TTSSpeech.getInstance(this).say("我是长江4号");}
}

队列方式很简单,新建一个队列实例,先进先出,后进后出。。。

直接用List作为队列,读完就移除第一个,如果还有就继续读。。。

可能有个问题是,如果有其他因素(如突然来电)打断队列,队列就会中断。不知道会不会等因素完后继续播报。

讯飞在线语音TTS队列策略相关推荐

  1. Unity接讯飞在线语音API

    本文意在讲解如何利用讯飞官方提供的API通过讯飞服务实时的进行文字转语音. 先决条件:需要在讯飞官网注册自己的账号,拿到讯飞给的APPID.APISecret.APIKey,这三个字段是访问讯飞服务器 ...

  2. vue 讯飞在线文字合成语音,文字转成语音

    资源链接: 讯飞在线语音合成demo.tts_ws_js_demo.rar-互联网文档类资源-CSDN下载

  3. Android 讯飞离线语音听写/离线语音识别SDK

    平台 Android + 讯飞离线语音SDK SDK包 下载路径及方法见讯飞官方SDK文档: 离线语音听写 Android SDK 文档 # 在开发者控制台, 可以直接下载SDK. SDK包中的文件结 ...

  4. Unity 讯飞实时语音转写(二)—— 接收转写结果

    目录 Unity 讯飞实时语音转写(一)-- 使用WebSocket连接讯飞语音服务器 Unity 讯飞实时语音转写(二)-- 接收转写结果 Unity 讯飞实时语音转写(三)-- 分析转写结果 正文 ...

  5. 讯飞智能语音鼠标G50:AI语音、转写翻译、记录截图一键搞定!

    随着互联网的发展,智能鼠标已经成为我们生活和工作中不可或缺的组成部分.然而,鼠标滚轮异响.按键失灵.驱动难用.手感不合适等一系列问题仍时有发生,所以选择一款智能鼠标尤为重要,它不仅可以提高我们的工作效 ...

  6. 讯飞离线语音命令词识别

    讯飞离线语音命令词识别 强烈推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来! 网址:http://www.captainbed.net/yancyang ...

  7. QT+讯飞智能语音在线识别demo,录音识别

    目录 前言(feihua) 特性: 使用前提: 使用步骤: 软件获取方式 前言(feihua) 本程序使用讯飞的在线语音听写websocket API实现语音识别,在网络条件良好的前提下,识别速度是很 ...

  8. 讯飞智能语音先锋者:等到人机交互与人类交流一样自然时,真正的智能时代就来了...

    作者 | 夕颜 出品 | CSDN(ID:CSDNnews) 「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分.通过对 AI 生态顶级大咖.创业者.行业 KO ...

  9. 讯飞智能语音先锋者:等到人机交互与人类交流一样自然时,真正的智能时代就来了!...

    受访者 | 刘聪 记者 | 夕颜 出品 | CSDN(ID:CSDNnews) 「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分.通过对 AI 生态顶级大咖. ...

  10. 讯飞AIUI语音初体验

    集成SDK       近期使用科大讯飞AIUI开发一款智能语音灯控项目,因此在这记录一下我的心得,写的不好忘各位大佬见谅,不喜勿喷呐,下面就像大家介绍一下我的使用心得,注册讯飞账号,添加项目这些个常 ...

最新文章

  1. MyBatis——Java API
  2. Java中IO流的总结
  3. Jquery tmpl模板中if条件有多个时的写法
  4. VTK:细胞定位器可视化用法实战
  5. Ubuntu12.04安装小记
  6. Python pandas库159个常用方法使用说明(转载)
  7. .net各版本新增加的功能
  8. 301重定向错误(细心就不应该出错)
  9. django访问mysql数据库--模型(model)
  10. C语言中#define的用法
  11. 感染所有html病毒代码,非常简单的病毒代码汇总
  12. Coolpad/酷派炫影5890 root教程_方法
  13. 只需四步,让你成为朋友圈的焦点----Python制作微信好友头像墙
  14. shell脚本明文密码隐藏且加密
  15. envi添加国内坐标系
  16. 1.什么是Spark
  17. note_2019_8
  18. jsp 获取服务器ip 以及端口号
  19. 3天大会,全面解读AI如何成为华为的核心竞争力
  20. matlab svc,基于MATLAB的SVC抑制SSR仿真研究

热门文章

  1. ICEM对装配体进行网格划分实例
  2. AVI、WMV、FLV、MKV、WebM、MOV格式视频怎么打开?它们之间有什么区别?答案在这里
  3. 上海航芯 | 热敏打印机方案分享
  4. 如何在线修改图片大小?图片在线改大小方法推荐给你
  5. 佳能Canon imageCLASS MF240 一体机驱动
  6. OKR案例: 回顾/复盘会流程模板
  7. 程学旗 计算机,专家人才库数据----中国科学院计算技术研究所
  8. java nio 大文件_java nio 超大文件的读写
  9. 编译原理实验:miniC语言编译器
  10. 软件工程之概要设计说明书