Android原生Rom方式:文字转语音的TTS 程序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/IT666DHW/article/details/81910343

Android原生rom,本自带tts语音,在这基础上可以直接调用使用即可。源码如下。

public class TTSdemo extends Activity implements OnInitListener{

  1. /** Called when the activity is first created. */

  2. private EditText inputText = null;

  3. private Button speakBtn = null;

  4. /**

  5. * default state : CHECK_VOICE_DATA_FAIL = 0;

  6. */

  7. private static final int REQ_TTS_STATUS_CHECK = 0;

  8. private static final String TAG = "TTS Demo";

  9. private TextToSpeech mTts;

  10.  
  11. @Override

  12. public void onCreate(Bundle savedInstanceState) {

  13. super.onCreate(savedInstanceState);

  14. setContentView(R.layout.main);

  15.  
  16. try {//"这里注意,如果本机tts没有安装,这里就会抓获到异常的。tts使用的时候也要注意非空验证"

  17. // 检查TTS数据是否已经安装并且可用

  18. Intent checkIntent = new Intent();

  19. checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);// 检查TTS状态

  20.  
  21.  
  22. PackageManager pm = getPackageManager();

  23. ResolveInfo resolveInfo = pm.resolveActivity( checkIntent, PackageManager.MATCH_DEFAULT_ONLY );

  24. if( resolveInfo == null ) {

  25. // Not able to find the activity which should be started for this intent

  26. Log.e("----resolveInfo--------", "" + " Not able to find the activity which should be started for this intent");

  27. } else {

  28. startActivityForResult(checkIntent, REQ_TTS_STATUS_CHECK);

  29. }

  30.  
  31. } catch (ActivityNotFoundException e) {

  32. Log.e(TAG, "Oops! The function is not available in your device." + e.fillInStackTrace());

  33.  
  34. }

  35.  
  36. inputText = (EditText) findViewById(R.id.inputText);

  37. speakBtn = (Button) findViewById(R.id.speakBtn);

  38. inputText.setText("This is an example of speech synthesis.");

  39. speakBtn.setOnClickListener(new OnClickListener() {

  40.  
  41. public void onClick(View v) {

  42. // TODO Auto-generated method stub

  43. mTts.speak(inputText.getText().toString(), TextToSpeech.QUEUE_ADD, null);

  44. // 朗读输入框里的内容

  45. }

  46. });

  47.  
  48. }


 

 
  1. // 实现TTS初始化接口

  2. @Override

  3. public void onInit(int status) {

  4. // TODO Auto-generated method stub

  5. // TTS Engine初始化完成

  6. if (status == TextToSpeech.SUCCESS) {

  7. int result = mTts.setLanguage(Locale.US);

  8. // 设置发音语言

  9. if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)

  10. // 判断语言是否可用

  11. {

  12. Log.v(TAG, "Language is not available");

  13. speakBtn.setEnabled(false);

  14. } else {

  15. mTts.speak("This is an example of speech synthesis.", TextToSpeech.QUEUE_ADD, null);

  16. speakBtn.setEnabled(true);

  17. }

  18. }

  19.  
  20. }

  21.  
  22. protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  23. if (requestCode == REQ_TTS_STATUS_CHECK) {

  24. switch (resultCode) {

  25. case TextToSpeech.Engine.CHECK_VOICE_DATA_PASS:

  26. // 这个返回结果表明TTS Engine可以用

  27. {

  28. mTts = new TextToSpeech(this, this);

  29. Log.v(TAG, "TTS Engine is installed!");

  30.  
  31. }

  32.  
  33. break;

  34. case TextToSpeech.Engine.CHECK_VOICE_DATA_BAD_DATA:

  35. // 需要的语音数据已损坏

  36. case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA:

  37. // 缺少需要语言的语音数据

  38. case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_VOLUME:

  39. // 缺少需要语言的发音数据

  40. {

  41. // 这三种情况都表明数据有错,重新下载安装需要的数据

  42. Log.v(TAG, "Need language stuff:" + resultCode);

  43. Intent dataIntent = new Intent();

  44. dataIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);

  45. startActivity(dataIntent);

  46.  
  47. }

  48. break;

  49. case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL:

  50. // 检查失败

  51. default:

  52. Log.v(TAG, "Got a failure. TTS apparently not available");

  53. break;

  54. }

  55. } else {

  56. // 其他Intent返回的结果

  57. }

  58. }

  59.  
  60. @Override

  61. protected void onPause() {

  62. // TODO Auto-generated method stub

  63. super.onPause();

  64. if (mTts != null)

  65. // activity暂停时也停止TTS

  66. {

  67. mTts.stop();

  68. }

  69. }

  70.  
  71. @Override

  72. protected void onDestroy() {

  73. // TODO Auto-generated method stub

  74. super.onDestroy();

  75. // 释放TTS的资源

  76. if (mTts != null)

  77. mTts.shutdown();

  78. }

 
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  3. android:layout_width="fill_parent"

  4. android:layout_height="fill_parent"

  5. android:orientation="vertical" >

  6.  
  7.  
  8. <EditText

  9. android:id="@+id/inputText"

  10. android:hint="@string/hint"

  11. android:layout_width="fill_parent"

  12. android:layout_height="wrap_content"

  13. />

  14.  
  15. <Button

  16. android:id="@+id/speakBtn"

  17. android:layout_width="wrap_content"

  18. android:layout_height="wrap_content"

  19. android:layout_gravity="center_horizontal"

  20.  
  21. />

  22.  
  23. </LinearLayout>

以上源码粘贴进入项目就没有问题了。但是这只是英文。而且对于手机的tts依赖很高,如果手机没有装tts,那么这个程序不起作用,无法发音。

所有,第二种,从网络寻找 离线“语音合成”,   大家都在说什么  讯飞XX ,百度XX等等,  百度不知道。至少讯飞亲自测试了。  就是一个收费的垃圾??

根本没有免费,而且还是在线的。如下。

于是继续找寻,暂时找到了一个离线的 ‘语音合成’demo,支持中文语音,但是发现一个问题,对于单词都读成一个个字母了。  暂时没有调整。 项目如下。

诸如此类的大量文章,手机如果没有tts,都是无法运行的(http://blog.csdn.net/ichliebephone/article/details/6373184#java)

我找到的,离线语音包的demo现在分享出来,共同研究。   下载地址:http://download.csdn.net/detail/flyingsir_zw/9453049

猜你喜欢

转载自blog.csdn.net/IT666DHW/article/details/81910343
今日推荐