华为云开发者联盟 Text-to-speech 入门与进阶学习笔记(android)

Text-to-speech 入门与进阶学习笔记(android)

1,入门:让TEXT朗读起来//1,先写一个用来检查tts是否安装的方法privatefinalstaticintCHECK_CODE=1; publicvoidcheckTts(){ IntentcheckIntent=newIntent();checkIntent.setAction(Te...

1,入门:让TEXT朗读起来

 
  
  1. //1,先写一个用来检查tts是否安装的方法 private final static int CHECK_CODE = 1;       
  2. public void checkTts(){           
  3. Intent checkIntent = new Intent();         checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);                     
  4. startActivityForResult(checkIntent, CHECK_CODE);               }       
  5. //创建一个TTS       
  6. private TextToSpeech mTts;         
  7. //这个自己先去了解下onActivityResult是怎么回事,这里不作详解       
  8. @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {           
  9. // TODO Auto-generated method stub         super.onActivityResult(requestCode, resultCode, data);           
  10. if(requestCode == CHECK_CODE){               
  11. if(resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS){                   
  12. //成功创建一个TTS                   
  13. mTts = new TextToSpeech(this, this);               
  14. }else{                   
  15. //否则安装一个                   
  16. Intent installIntent = new Intent();                 installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);                 startActivity  
  17. (installIntent);             }         }     }   
  18. //2,让TTS朗读起来   
  19. //onCreate方法中   
  20. //检查TTS是否正常 checkTts();             
  21. //创建用组件 private speakValue = (EditText)   
  22. findViewById(R.id.speakValue);   
  23. private speakButton = (Button)   
  24. findViewById(R.id.sayHello);             
  25. speakButton.setOnClickListener(new OnClickListener() {                             
  26. @Override              
  27. public void onClick(View v) {                   
  28. // TODO Auto-generated method stub                   
  29. String text = speakValue.getText().toString();                   
  30. Log.d("result","text-->" +text);                 sayTts(text);             }         });   
  31. //TTs朗读用 private void sayTts(String text){   
  32. //最简单的例子 mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);                           
  33. }   
  34. //补充,使用TTS朗读,一定要实现OnInitListener 接口   
  35. //TTs对象创建后初始化   
  36. @Overridepublic void onInit(int status) {             
  37. if(status == TextToSpeech.SUCCESS){   
  38. //设置语言区域 int result = mTts.setLanguage(Locale.US);   
  39. //如果是不支持语言   
  40. if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){   
  41. Log.e("error","不支持");             }         }     } 

就这么点代码就可以正常运行了…

2,进阶使用:改变我们朗读播放的类型,回调函数的使用与自定义文字发音

1,更改播放的流类型(暂且这样说,希望,有人解释一下)

 
  
  1. //更改播放使用的流类型   
  2. //在sayTts作以下修改   
  3. //TTs朗读用 private void sayTts(String text) { HashMap<String, String> myAlarm = new HashMap();   
  4. //把播放类型,通过闹钟流实现 myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM));     
  5. //你播放的tts在音频播放的闹钟类型流中 mTts.speak(text, TextToSpeech.QUEUE_FLUSH, myAlarm);     
  6. //英语原文是这样,我了解的就是以上我注释的内容   
  7. //我感觉不是很了解,希望有人帮帮   
  8. //On Android, each audio stream that is played is associated with one   
  9. //stream type, as defined in android.media.AudioManager. For a talking   
  10. //alarm clock, we would like our text to be played on the   
  11. //AudioManager.STREAM_ALARM stream type so that it respects the alarm   
  12. //settings the user has chosen on the device.             

2,回调函数的使用

 
  
  1. //在sayTts()中实现..   
  2. //需要实现OnUtteranceCompletedListener这个接口   
  3. //TTs朗读用     
  4. private Toast toast; prvate Context context = getApplicationContext();   
  5. private void sayTts(String text) { HashMap<String, String> myAlarm = new HashMap();   mTts.setOnUtteranceCompletedListener(this);   
  6. myAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "me too");     
  7. toast = Toast.makeText(context, "me too", Toast.LENGTH_LONG);   
  8. //最简单的例子 mTts.speak(text, TextToSpeech.QUEUE_FLUSH, myAlarm); }     
  9. //回调函数 @Overridepublic void onUtteranceCompleted(String utteranceId) { speakPlayBack(utteranceId); }   
  10. private void speakPlayBack(String str) { Log.d("result","playBack-->" + str); toast.show(); } 

3,录制TTS朗读保存到SD卡中

 
  
  1. //把TTS朗读结果保存   
  2. private void sayTofile(String text) {   
  3. HashMap<String, String> ttsRender = new HashMap<String, String>();   
  4. String destFileName = "/sdcard/tts/"+text+".wav"; ttsRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, text); mTts.synthesizeToFile(text, ttsRender, destFileName);   
  5. }   
  6. //在  

你就可以看到你刚才朗读的Text被保存了

4,自定义Text发音

 
  
  1. //自定义文字播放   
  2. private void sayTrue(String text) {   
  3. String destFileName = "/sdcard/tts/"+text+".wav"; mTts.addSpeech(text, destFileName);   
  4. mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null); }   
  5. //在onclick方法中运行 sayTrue(); 

亲测,MP3也可以播放…

5,销毁

 
  
  1. @Overrideprotected void onDestroy() {        super.onDestroy();       
  2. if(mTts != null){           
  3. mTts.stop();           
  4. mTts.shutdown();     } } 

 

转载于:https://blog.51cto.com/youxilua/772702

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐

  • 浏览量 152
  • 收藏 0
  • 0

所有评论(0)

查看更多评论 
已为社区贡献5条内容