TTS和播放声音- Android



我的应用程序中有一个viewpager。当用户向左或向右滑动时,我使用TTS引擎来播放文本和MediaPlayer来播放声音。

问题是两者同时播放。我如何播放声音一旦TTS引擎说文本结束?

p。S:我不想用sleep或wait。

更新:

下面是我的代码:
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
@Override
public void onInit(int status) {
    if (status == TextToSpeech.SUCCESS) {
        if (result == TextToSpeech.LANG_MISSING_DATA
                || result == TextToSpeech.LANG_NOT_SUPPORTED) {
        } else {
            //Do Something here
        }

        if(Build.VERSION.SDK_INT  >= 15 ){
            UtteranceProgressListener listener = new UtteranceProgressListener() {
                @Override
                public void onStart(String utteranceId) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void onError(String utteranceId) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void onDone(String utteranceId) {
                    // TODO Auto-generated method stub
                    //start MediaPlayer
                    playMedia(viewPager.getCurrentItem());
                }
            };
            tts.setOnUtteranceProgressListener(listener);
        }
        else{
            tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener(){
                @Override
                public void onUtteranceCompleted(String arg0) {
                     playMedia(viewPager.getCurrentItem());
                }
              });
        }
    } else {
        Intent installIntent = new Intent();
        installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
        startActivity(installIntent);
    }
}

你必须给它一个id参数。否则它不会调用侦听器:

HashMap<String, String> params = new HashMap<String, String>();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"stringId");
textToSpeech.speak(string,TextToSpeech.QUEUE_ADD, params);

在android中,有两个 api 来检测TTS引擎是否完成了说话:

  • > Android 4 (ICS)

    UtteranceProgressListener listener = new UtteranceProgressListener() {
        @Override
        public void onStart(String utteranceId) {
            // TODO Auto-generated method stub
        }
        @Override
        public void onError(String utteranceId) {
            // TODO Auto-generated method stub
        }
        @Override
        public void onDone(String utteranceId) {
            // TODO Auto-generated method stub
            //start MediaPlayer
        }
    };
        yourTTSObject.setOnUtteranceProgressListener(listener);
    
  • ICS Android 4.0版本您可以使用:

    yourTTSObject.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener(){
        @Override
        public void onUtteranceCompleted(String arg0) {
              // start your mediaplayer here
        }
      });
    

    查看这里的文档

最新更新