2010-01-07 32 views
0

在我看來,類TextToSpeech的「說」方法只能用於onInit或onUtteranceCompleted方法。但是,onInit和onUtteranceCompleted沒有任何傳遞字符串的參數。Android的語音引擎的字符串輸入

在下面的代碼中,我試圖在方法外定義一個全局字符串arraylist,並使用arraylist進行字符串輸入。由於某種原因,它沒有工作。但引擎確實說出「你睡得好」 。任何幫助表示讚賞。

public class TTS extends Activity implements OnInitListener,OnUtteranceCompletedListener,Runnable { 

    ArrayList<String> content=new ArrayList<String>();  
    int MY_DATA_CHECK_CODE=50; 
private TextToSpeech mTts; 

公共無效的onCreate(捆綁savedInstanceState){

 content.add("test"); 
     content.add("another test"); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 

     Intent checkIntent = new Intent(); 
     checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
     startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 
    } 


    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == MY_DATA_CHECK_CODE) { 

     if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 
      // success, create the TTS instance 
      mTts = new TextToSpeech(this,this); 



     } else { 
      // missing data, install it 

      Intent installIntent = new Intent(); 
      installIntent.setAction(
      TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
      startActivity(installIntent); 
     } 
    } 
} 


    public void onInit(int status){ 
if(status==TextToSpeech.SUCCESS){ 
    mTts.setLanguage(Locale.US); 
    mTts.setOnUtteranceCompletedListener(this); 

      String myText1 = "Did you sleep well?"; 
      mTts.speak(myText1, TextToSpeech.QUEUE_FLUSH, null); 

      for(int i=0;i<content.size();i++){ 
      mTts.speak(content.get(i),TextToSpeech.QUEUE_ADD,null); 
      } 


      if(status==TextToSpeech.ERROR){ 
    mTts.shutdown(); 
      } 
     } 

}

回答

0

我相信你的一些代碼丟失,但FYI有可能分配一個ID,以通過發聲參數圖,例如:

HashMap<String, String> myHashAlarm = new HashMap(); 
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "ID of First Utterance"); 
mTts.speak("It was a clear black night", TextToSpeech.QUEUE_ADD, myHashAlarm); 

「第一個發言的ID」將被傳遞給onUtteranceCompleted(String utteranceId)

請參閱Using Text-to-Speech

+0

事實上,你必須指定一個話語ID,否則沒有什麼效果。 – gregm 2010-05-07 12:58:28