<a target="_blank" href="http://blog.51cto.com/attachment/201202/222639811.jpg"></a>
//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是怎麼回事,這裡不作詳解
@Overrideprotected 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--&gt;" +text); sayTts(text); } });
//TTs朗讀用 private void sayTts(String text){
//最簡單的例子 mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
//補充,使用TTS朗讀,一定要實作OnInitListener 接口
//TTs對象建立後初始化
@Overridepublic 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","不支援"); } } }
<a target="_blank" href="http://blog.51cto.com/attachment/201202/222646790.png"></a>
就這麼點代碼就可以正常運作了…
//更改播放使用的流類型
//在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.
}
//在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); }
//回調函數 @Overridepublic void onUtteranceCompleted(String utteranceId) { speakPlayBack(utteranceId); }
private void speakPlayBack(String str) { Log.d("result","playBack-->" + str); toast.show(); }
<a target="_blank" href="http://blog.51cto.com/attachment/201202/222653366.png"></a>
//把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);
//在
<a target="_blank" href="http://blog.51cto.com/attachment/201202/222659919.png"></a>
你就可以看到你剛才朗讀的Text被儲存了
//自定義文字播放
private void sayTrue(String text) {
String destFileName = "/sdcard/tts/"+text+".wav"; mTts.addSpeech(text, destFileName);
mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null); }
//在onclick方法中運作 sayTrue();
<a target="_blank" href="http://blog.51cto.com/attachment/201202/222706828.png"></a>
親測,MP3也可以播放…
@Overrideprotected void onDestroy() { super.onDestroy();
if(mTts != null){
mTts.stop();
mTts.shutdown(); } }