科大讯飞离线语音合成简单实例

科大讯飞离线语音合成简单实例

 

讯飞语音开发集成地址http://www.xfyun.cn/

如何使用科大讯飞开放平台的语音合成呢?

1.首先要注册开发者账户, 创建我的新应用,创建完后就有一个专属APPID(非常重要),添加我的应用 , 下载你所需要的sdk,这里我们下载离线语音合成。注意:下载的sdk文件,都是自己创建的应用生成的,申请appid时就与自己的应用绑定了的。所以一定要使用自己下载的文件,appid的值也要使用自己的。

2.下载后将sdk解压,将libs下的两个jar包添加到libs目录下(jar包还要右键 add to Libraries), 同路径下的其它 .so文件(与c进行交互)复制到main路径下新建的 jniLibs(L要大写)目录下, 将assert目录拷贝到main目录下,将res目录下的tts文件复制到assert目录下。并在你的继承了Application的类中添加下图的几行代码进行配置(appid的值写自己注册的)。这些文件的安放位置在我的项目中体现如下:

3.在MainActivity同目录下创建类KqwSpeechSynthesizer,并创建类SoundTipUtil,再通过下图方框圈出的代码,即可实现在activity内进行语音合成的使用了。不妨试试!

KqwSpeechSynthesizer类的代码如下:


 
  1. import android.content.Context;

  2. import android.os.Bundle;

  3. import android.util.Log;

  4. import android.widget.Toast;

  5.  
  6. import com.iflytek.cloud.ErrorCode;

  7. import com.iflytek.cloud.InitListener;

  8. import com.iflytek.cloud.SpeechConstant;

  9. import com.iflytek.cloud.SpeechError;

  10. import com.iflytek.cloud.SpeechSynthesizer;

  11. import com.iflytek.cloud.SynthesizerListener;

  12. import com.iflytek.cloud.util.ResourceUtil;

  13.  
  14. /**

  15. * 语音合成器

  16. *

  17. * @author kongqw

  18. */

  19. public class KqwSpeechSynthesizer {

  20.  
  21. // Log标签

  22. private static final String TAG = "KqwSpeechSynthesizer";

  23.  
  24. private Context mContext;

  25.  
  26. // 语音合成对象

  27. private SpeechSynthesizer mTts;

  28.  
  29. public KqwSpeechSynthesizer(Context context) {

  30. mContext = context;

  31. // 初始化合成对象

  32. mTts = SpeechSynthesizer.createSynthesizer(context, new InitListener() {

  33. @Override

  34. public void onInit(int code) {

  35. Log.d(TAG, "InitListener init() code = " + code);

  36. if (code != ErrorCode.SUCCESS) {

  37. Toast.makeText(mContext, "初始化失败,错误码:" + code, Toast.LENGTH_SHORT).show();

  38. }

  39. }

  40. });

  41.  
  42. }

  43.  
  44. /**

  45. * 开始语音合成

  46. *

  47. * @param text

  48. */

  49. public void start(String text) {

  50. // 设置参数

  51. setParam();

  52. int code = mTts.startSpeaking(text, mTtsListener);

  53. if (code != ErrorCode.SUCCESS) {

  54. Toast.makeText(mContext, "语音合成失败,错误码: " + code, Toast.LENGTH_SHORT).show();

  55. }

  56. }

  57.  
  58. /**

  59. * 合成回调监听。

  60. */

  61. private SynthesizerListener mTtsListener = new SynthesizerListener() {

  62. @Override

  63. public void onSpeakBegin() {

  64. Log.i(TAG, "开始合成");

  65. }

  66.  
  67. @Override

  68. public void onSpeakPaused() {

  69. Log.i(TAG, "暂停合成");

  70. }

  71.  
  72. @Override

  73. public void onSpeakResumed() {

  74. Log.i(TAG, "继续合成");

  75. }

  76.  
  77. @Override

  78. public void onBufferProgress(int percent, int beginPos, int endPos, String info) {

  79. Log.i(TAG, "传冲进度 :" + percent);

  80. }

  81.  
  82. @Override

  83. public void onSpeakProgress(int percent, int beginPos, int endPos) {

  84. Log.i(TAG, "合成进度 : " + percent);

  85. }

  86.  
  87. @Override

  88. public void onCompleted(SpeechError error) {

  89. if (error == null) {

  90. Log.i(TAG, "合成完成");

  91. } else if (error != null) {

  92. Log.i(TAG, "error : " + error.toString());

  93. }

  94. }

  95.  
  96. @Override

  97. public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {

  98. // TODO Auto-generated method stub

  99.  
  100. }

  101. };

  102.  
  103. /**

  104. * 参数设置

  105. *

  106. * @return

  107. */

  108. private void setParam() {

  109. // 清空参数

  110. mTts.setParameter(SpeechConstant.PARAMS, null);

  111. // 设置使用本地引擎

  112. mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);

  113. // 设置发音人资源路径

  114. mTts.setParameter(ResourceUtil.TTS_RES_PATH, getResourcePath());

  115. // 设置发音人

  116. mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");

  117.  
  118. // 设置语速

  119. mTts.setParameter(SpeechConstant.SPEED, "50");

  120.  
  121. // 设置音调

  122. mTts.setParameter(SpeechConstant.PITCH, "50");

  123.  
  124. // 设置音量

  125. mTts.setParameter(SpeechConstant.VOLUME, "50");

  126.  
  127. // 设置播放器音频流类型

  128. mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");

  129. }

  130.  
  131. // 获取发音人资源路径

  132. private String getResourcePath() {

  133. StringBuffer tempBuffer = new StringBuffer();

  134. // 合成通用资源

  135. tempBuffer.append(ResourceUtil.generateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets, "tts/common.jet"));

  136. tempBuffer.append(";");

  137. // 发音人资源

  138. tempBuffer.append(ResourceUtil.generateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets, "tts/xiaoyan.jet"));

  139. return tempBuffer.toString();

  140. }

  141.  
  142. }

SoundTipUtill类代码如下:


 
  1. import android.content.Context;

  2.  
  3. public class SoundTipUtil {

  4. private static KqwSpeechSynthesizer kqwSpeechSynthesizer;

  5.  
  6. public static void soundTip(Context context,String text) {

  7. kqwSpeechSynthesizer = new KqwSpeechSynthesizer(context);

  8. kqwSpeechSynthesizer.start(text);

  9. }

  10.  
  11. }

如果不是在activity内进行语音播报,那该咋办?

按以下步骤即可实现:1.在继承了Application的类中添加如下几行代码(图1);

                                     2.在非Activity类中调用方法即可(如图2)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章