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

//1,先写一个用来检查tts是否安装的方法
private  final  static  int  CHECK_CODE = 1 ;
     public  void  checkTts(){
         Intent checkIntent = new  Intent();
         checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
             
     startActivityForResult(checkIntent, CHECK_CODE);
         
     }
     //创建一个TTS
     private  TextToSpeech mTts;
     
//这个自己先去了解下onActivityResult是怎么回事,这里不作详解
     @Override
protected  void  onActivityResult( int  requestCode, int  resultCode, Intent data) {
         // TODO Auto-generated method stub
         super .onActivityResult(requestCode, resultCode, data);
         if (requestCode == CHECK_CODE){
             if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS){
                 //成功创建一个TTS
                 mTts = new  TextToSpeech( this , this );
             } else {
                 //否则安装一个
                 Intent installIntent = new  Intent();
                 installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                 startActivity(installIntent);
             }
         }
     }
//2,让TTS朗读起来
//onCreate方法中
//检查TTS是否正常
checkTts();
         
//创建用组件
private  speakValue = (EditText) findViewById(R.id.speakValue);
private  speakButton = (Button) findViewById(R.id.sayHello);
         
speakButton.setOnClickListener( new  OnClickListener() {
             
             @Override
             public  void  onClick(View v) {
                 // TODO Auto-generated method stub
                 String text = speakValue.getText().toString();
                 Log.d( "result" , "text-->"  +text);
                 sayTts(text);
             }
         });
//TTs朗读用
private  void  sayTts(String text){
//最简单的例子
mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null );
         
         
     }
//补充,使用TTS朗读,一定要实现OnInitListener 接口
//TTs对象创建后初始化
@Override
public  void  onInit( int  status) {
         
if (status == TextToSpeech.SUCCESS){
//设置语言区域
int  result = mTts.setLanguage(Locale.US);
//如果是不支持语言
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){
Log.e( "error" , "不支持" );
             }
         }
     }

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

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

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

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

2,回调函数的使用

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

image

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

 

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

 

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

4,自定义Text发音

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

 

image 亲测,MP3也可以播放…

5,销毁

1
2
3
4
5
6
7
8
@Override
protected  void  onDestroy() {
        super .onDestroy();
     if (mTts != null ){
         mTts.stop();
         mTts.shutdown();
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值