Text-to-speech 入门与进阶学习笔记(android)
16lz
2021-01-25
1,入门:让TEXT朗读起来
- //1,先写一个用来检查tts是否安装的方法privatefinalstaticintCHECK_CODE=1;
- publicvoidcheckTts(){
- IntentcheckIntent=newIntent();checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
- startActivityForResult(checkIntent,CHECK_CODE);}
- //创建一个TTS
- privateTextToSpeechmTts;
- //这个自己先去了解下onActivityResult是怎么回事,这里不作详解
- @OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
- //TODOAuto-generatedmethodstubsuper.onActivityResult(requestCode,resultCode,data);
- if(requestCode==CHECK_CODE){
- if(resultCode==TextToSpeech.Engine.CHECK_VOICE_DATA_PASS){
- //成功创建一个TTS
- mTts=newTextToSpeech(this,this);
- }else{
- //否则安装一个
- IntentinstallIntent=newIntent();installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);startActivity
- (installIntent);}}}
- //2,让TTS朗读起来
- //onCreate方法中
- //检查TTS是否正常checkTts();
- //创建用组件privatespeakValue=(EditText)
- findViewById(R.id.speakValue);
- privatespeakButton=(Button)
- findViewById(R.id.sayHello);
- speakButton.setOnClickListener(newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- Stringtext=speakValue.getText().toString();
- Log.d("result","text-->"+text);sayTts(text);}});
- //TTs朗读用privatevoidsayTts(Stringtext){
- //最简单的例子mTts.speak(text,TextToSpeech.QUEUE_FLUSH,null);
- }
- //补充,使用TTS朗读,一定要实现OnInitListener 接口
- //TTs对象创建后初始化
- @OverridepublicvoidonInit(intstatus){
- if(status==TextToSpeech.SUCCESS){
- //设置语言区域intresult=mTts.setLanguage(Locale.US);
- //如果是不支持语言
- if(result==TextToSpeech.LANG_MISSING_DATA||result==TextToSpeech.LANG_NOT_SUPPORTED){
- Log.e("error","不支持");}}}
就这么点代码就可以正常运行了…
2,进阶使用:改变我们朗读播放的类型,回调函数的使用与自定义文字发音
1,更改播放的流类型(暂且这样说,希望,有人解释一下)
- //更改播放使用的流类型
- //在sayTts作以下修改
- //TTs朗读用privatevoidsayTts(Stringtext){HashMap<String,String>myAlarm=newHashMap();
- //把播放类型,通过闹钟流实现myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM,String.valueOf(AudioManager.STREAM_ALARM));
- //你播放的tts在音频播放的闹钟类型流中mTts.speak(text,TextToSpeech.QUEUE_FLUSH,myAlarm);
- //英语原文是这样,我了解的就是以上我注释的内容
- //我感觉不是很了解,希望有人帮帮
- //OnAndroid,eachaudiostreamthatisplayedisassociatedwithone
- //streamtype,asdefinedinandroid.media.AudioManager.Foratalking
- //alarmclock,wewouldlikeourtexttobeplayedonthe
- //AudioManager.STREAM_ALARMstreamtypesothatitrespectsthealarm
- //settingstheuserhaschosenonthedevice.
- }
2,回调函数的使用
- //在sayTts()中实现..
- //需要实现OnUtteranceCompletedListener这个接口
- //TTs朗读用
- privateToasttoast;prvateContextcontext=getApplicationContext();
- privatevoidsayTts(Stringtext){HashMap<String,String>myAlarm=newHashMap();mTts.setOnUtteranceCompletedListener(this);
- myAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"metoo");
- toast=Toast.makeText(context,"metoo",Toast.LENGTH_LONG);
- //最简单的例子mTts.speak(text,TextToSpeech.QUEUE_FLUSH,myAlarm);}
- //回调函数@OverridepublicvoidonUtteranceCompleted(StringutteranceId){speakPlayBack(utteranceId);}
- privatevoidspeakPlayBack(Stringstr){Log.d("result","playBack-->"+str);toast.show();}
3,录制TTS朗读保存到SD卡中
- //把TTS朗读结果保存
- privatevoidsayTofile(Stringtext){
- HashMap<String,String>ttsRender=newHashMap<String,String>();
- StringdestFileName="/sdcard/tts/"+text+".wav";ttsRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,text);mTts.synthesizeToFile(text,ttsRender,destFileName);
- }
- //在
你就可以看到你刚才朗读的Text被保存了
4,自定义Text发音
- //自定义文字播放
- privatevoidsayTrue(Stringtext){
- StringdestFileName="/sdcard/tts/"+text+".wav";mTts.addSpeech(text,destFileName);
- mTts.speak(text,TextToSpeech.QUEUE_FLUSH,null);}
- //在onclick方法中运行sayTrue();
亲测,MP3也可以播放…
5,销毁
- @OverrideprotectedvoidonDestroy(){super.onDestroy();
- if(mTts!=null){
- mTts.stop();
- mTts.shutdown();}}
更多相关文章
- SettingActivity学习笔记
- Android(安卓)获取控件高度宽度三种方法
- Android(安卓)Vold和SDIO冲突问题解决方法
- android 自定义动画2
- android webView 使用方法
- Android(安卓)UI 测试框架 Espresso
- Android获取当前进程名
- Android中图片的处理(放大缩小,去色,转换格式,增加水印等)函数
- Android(安卓)生命周期架构组件使用方法