科大訊飛離線語音合成簡單實例

科大訊飛離線語音合成簡單實例

 

訊飛語音開發集成地址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)

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