开发者

string input for Android's speech engine

开发者 https://www.devze.com 2022-12-15 13:02 出处:网络
It seems to me that the method \"speak\" of class TextToSpeech only works inmethodonInit or onUtteranceCompleted. However, onInit and onUtteranceCompleted don\'t have any parameter for passing strings

It seems to me that the method "speak" of class TextToSpeech only works in method onInit or onUtteranceCompleted. However, onInit and onUtteranceCompleted don't have any parameter for passing strings.

In the following code, I tried to define a global string arraylist outside the methods and used the arraylist for string input.For some reason , it didn't work out.But the engine did speak "did you sleep well". Any help is appreciated.

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

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

public void 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开发者_如何学C_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();
          }
        }

}


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消