строковый ввод для речевого движка Android - PullRequest
0 голосов
/ 07 января 2010

Мне кажется, что метод «говорят» о классе TextToSpeech работает только в методе onInit или onUtteranceCompleted. Однако onInit и onUtteranceCompleted не имеют параметров для передачи строк.

В следующем коде я попытался определить глобальный строковый 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;

public void onCreate (Bundle saveInstanceState) {

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

}

1 Ответ

0 голосов
/ 07 января 2010

Я полагаю, что часть вашего кода отсутствует, но, к вашему сведению, можно назначить идентификатор высказыванию через карту параметров, например ::100100

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);

«Идентификатор первого высказывания» будет передан onUtteranceCompleted(String utteranceId)

См. Использование преобразования текста в речь .

...