分享

科大讯飞纯离线语音合成的快速集成

 nxhujiee 2019-10-14

1,注册科大讯飞开发者,新建应用,下载离线语音合成SDK到本地

 

2,将下载好的SDK中的jar,assets文件下的tts包,.so文件复制到项目中

 

3,将下面的工具类复制到项目中

  1. /**
  2. * 语音合成器
  3. *
  4. * @author kongqw
  5. */
  6. public class KqwSpeechSynthesizer {
  7. // Log标签
  8. private static final String TAG = "KqwSpeechSynthesizer";
  9. private Context mContext;
  10. // 语音合成对象
  11. private SpeechSynthesizer mTts;
  12. public KqwSpeechSynthesizer(Context context) {
  13. mContext = context;
  14. // 初始化合成对象
  15. mTts = SpeechSynthesizer.createSynthesizer(context, new InitListener() {
  16. @Override
  17. public void onInit(int code) {
  18. Log.d(TAG, "InitListener init() code = " + code);
  19. if (code != ErrorCode.SUCCESS) {
  20. Toast.makeText(mContext, "初始化失败,错误码:" + code, Toast.LENGTH_SHORT).show();
  21. }
  22. }
  23. });
  24. }
  25. /**
  26. * 开始语音合成
  27. */
  28. public void start(String text) {
  29. // 设置参数
  30. setParam();
  31. int code = mTts.startSpeaking(text, mTtsListener);
  32. if (code != ErrorCode.SUCCESS) {
  33. Toast.makeText(mContext, "语音合成失败,错误码: " + code, Toast.LENGTH_SHORT).show();
  34. }
  35. }
  36. /**
  37. * 结束语音合成
  38. */
  39. public void stop() {
  40. if (null != mTts) {
  41. mTts.stopSpeaking();
  42. // 退出时释放连接
  43. mTts.destroy();
  44. }
  45. }
  46. /**
  47. * 合成回调监听。
  48. */
  49. private SynthesizerListener mTtsListener = new SynthesizerListener() {
  50. @Override
  51. public void onSpeakBegin() {
  52. Log.i(TAG, "开始合成");
  53. }
  54. @Override
  55. public void onSpeakPaused() {
  56. Log.i(TAG, "暂停合成");
  57. }
  58. @Override
  59. public void onSpeakResumed() {
  60. Log.i(TAG, "继续合成");
  61. }
  62. @Override
  63. public void onBufferProgress(int percent, int beginPos, int endPos, String info) {
  64. Log.i(TAG, "传冲进度 :" + percent);
  65. }
  66. @Override
  67. public void onSpeakProgress(int percent, int beginPos, int endPos) {
  68. // Log.i(TAG, "合成进度 : " + percent);
  69. }
  70. @Override
  71. public void onCompleted(SpeechError speechError) {
  72. if (speechError == null) {
  73. Log.i(TAG, "合成完成");
  74. } else {
  75. Log.i(TAG, "error : " + speechError.toString());
  76. }
  77. }
  78. @Override
  79. public void onEvent(int i, int i1, int i2, Bundle bundle) {
  80. }
  81. };
  82. /**
  83. * 参数设置
  84. */
  85. private void setParam() {
  86. // 清空参数
  87. mTts.setParameter(SpeechConstant.PARAMS, null);
  88. // 设置使用本地引擎
  89. mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);
  90. // 设置发音人资源路径
  91. mTts.setParameter(ResourceUtil.TTS_RES_PATH, getResourcePath());
  92. // 设置发音人
  93. mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");
  94. // 设置语速
  95. mTts.setParameter(SpeechConstant.SPEED, "50");
  96. // 设置音调
  97. mTts.setParameter(SpeechConstant.PITCH, "50");
  98. // 设置音量
  99. mTts.setParameter(SpeechConstant.VOLUME, "50");
  100. // 设置播放器音频流类型
  101. mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");
  102. }
  103. // 获取发音人资源路径
  104. private String getResourcePath() {
  105. // 合成通用资源
  106. // 发音人资源
  107. return ResourceUtil.generateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets, "tts/common.jet") + ";" +
  108. ResourceUtil.generateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets, "tts/xiaoyan.jet");
  109. }
  110. }

 

4,项目中使用

首先在Application中初始化:

  1. String param = "appid=5c6224f9," + SpeechConstant.ENGINE_MODE + "=" + SpeechConstant.MODE_MSC;
  2. SpeechUtility.createUtility(this, param); //将这里的appid的值替换成你在第一步中拿到的appid的值

然后在有需要的页面使用:

在onCreate中初始化工具类:mKqwSpeechSynthesizer = new KqwSpeechSynthesizer(this);

在具体要语音播报的地方调用:mKqwSpeechSynthesizer.start(speckContent);

在onDestory中释放:mKqwSpeechSynthesizer.stop();

 

OK!完成,就是这么简单!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多