0

在我看来,TextToSpeech 类的“说话”方法仅适用于方法 onInit 或 onUtteranceCompleted。但是,onInit 和 onUtteranceCompleted 没有用于传递字符串的任何参数。

在下面的代码中,我尝试在方法之外定义一个全局字符串数组列表,并使用数组列表进行字符串输入。由于某种原因,它没有成功。但是引擎确实说“你睡得好吗”。任何帮助表示赞赏。

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(Bundle 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();
          }
        }

}

4

1 回答 1

0

I believe some of your code is missing, but FYI it is possible to assign an ID to an utterance via the parameters map, e.g.:

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 of First Utterance" will be passed to onUtteranceCompleted(String utteranceId)

Please see Using Text-to-Speech.

于 2010-01-07T20:01:53.627 回答