總網頁瀏覽量

關於我自己

我的相片
人生的必修課是接受無常,人生的選修課是放下執著。

2015年9月2日 星期三

[Android API] TextToSpeech 好用文字發音

下載Google Translate 的jar檔
http://code.google.com/p/google-api-translate-java/downloads/list

Eclipse >Package Explorer 中選取開發的專案 > Propertires > Java Build Path > Libabries > Add External JARs > 選到剛下載的.jar位置

import com.google.api.translate.Language;
import com.google.api.translate.Translate;

public class TestPage extends Activity implements OnInitListener
{
    private TextToSpeech mTts;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
//檢查TTS數據是否已經安裝並且可用  
        Intent checkIntent = new Intent();  
        checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);  
        startActivityForResult(checkIntent, REQ_TTS_STATUS_CHECK);
    }
@Override
public void onInit(int status) {
   //TTS Engine初始化完成  
   if(status == TextToSpeech.SUCCESS)  
   {  
       int result = mTts.setLanguage(Locale.US); // 語言
       mTts.setPitch(1.0f); // 音調
       mTts.setSpeechRate(1); // 速度
       //設置發音語言
//判斷語言是否可用
       if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {  
//無法使用
Log.d("522", "Language is not available");    
       } else {  
//可以使用, 這才去呼叫我們自己寫的function
        refreshQustion();    
       }  
   }
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == REQ_TTS_STATUS_CHECK)
{
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) // 如果TTS Engine有成功找到的話
{
mTts = new TextToSpeech(this, this);
// 宣告一個 TextToSpeech instance, 註冊android.speech.tts.TextToSpeech.OnInitListener
// 當TTS Engine 初始完後會呼叫 onInit(int status)
Log.d("onActivityResult", "onInit");
}else{
  // 如果 TTS 沒有安裝的話 , 要求安裝
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
}
@Override
protected void onPause() {    
   super.onPause();  
   if(mTts != null) {  
//activity暫停時也停止TTS
       mTts.stop();  
   }  
}  

@Override
protected void onDestroy() {    
   super.onDestroy();
   if (mTts != null)
   {
    mTts.stop();
    //釋放TTS的資源
    mTts.shutdown();
   }
}
public void refreshQustion() {
mTts.speak("text", TextToSpeech.QUEUE_FLUSH, null);
//TextToSpeech.QUEUE_ADD 為目前的念完才念
mTts.speak("tv_question.getText().toString()", TextToSpeech.QUEUE_ADD, null);
}
}


沒有留言:

張貼留言