TTS暂停按钮,我只能阻止它完成,但不能恢复

时间:2014-03-26 19:08:29

标签: android text-to-speech resume

我有一个小程序,它在for循环中使用TTS。 我创建了一个按tts.stop()停止TTS的Button。 如果我点击按钮,有没有办法暂停TTS。停止的问题是,我无法恢复TTS。我知道在TTS中没有一个简单的暂停方法。

 public class MainActivity extends Activity implements OnClickListener, OnInitListener {
      public Button btn;
      public Button next;

      private TextToSpeech tts;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    tts = new TextToSpeech(this, this);



    }

 public void onClick(View v) {
    tts.speak("Mach dich bereit!", TextToSpeech.QUEUE_FLUSH, null);

    if (v == btn) {
        for (int i = 1; i < 7; i++) {
            String str = String.valueOf(i);
            tts.speak(str, TextToSpeech.QUEUE_ADD, null);
            tts.playSilence(3000, TextToSpeech.QUEUE_ADD, null);

        }

    }

 @Override
public void onInit(int status) {
    // Button init. and ClickListener
    btn = (Button) findViewById(R.id.button1);
    btn.setOnClickListener(this); }

//my button to stop!
public void verlaufKlick(View view) {  
    tts.stop();
                }

错误:

03-26 23:33:43.266: E/AndroidRuntime(1720): FATAL EXCEPTION: main
03-26 23:33:43.266: E/AndroidRuntime(1720): java.lang.NullPointerException
03-26 23:33:43.266: E/AndroidRuntime(1720):     at com.example.halloandroid.MainActivity.onClick(MainActivity.java:73)
03-26 23:33:43.266: E/AndroidRuntime(1720):     at android.view.View.performClick(View.java:4240)
03-26 23:33:43.266: E/AndroidRuntime(1720):     at android.view.View$PerformClick.run(View.java:17721)
03-26 23:33:43.266: E/AndroidRuntime(1720):     at android.os.Handler.handleCallback(Handler.java:730)
03-26 23:33:43.266: E/AndroidRuntime(1720):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-26 23:33:43.266: E/AndroidRuntime(1720):     at android.os.Looper.loop(Looper.java:137)
03-26 23:33:43.266: E/AndroidRuntime(1720):     at android.app.ActivityThread.main(ActivityThread.java:5103)
03-26 23:33:43.266: E/AndroidRuntime(1720):     at java.lang.reflect.Method.invokeNative(Native Method)
03-26 23:33:43.266: E/AndroidRuntime(1720):     at java.lang.reflect.Method.invoke(Method.java:525)
03-26 23:33:43.266: E/AndroidRuntime(1720):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-26 23:33:43.266: E/AndroidRuntime(1720):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-26 23:33:43.266: E/AndroidRuntime(1720):     at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:1)

您是否在暂停期间考虑过playing a silence,就像您在话语之间所做的那样?上一个答案:https://stackoverflow.com/a/11079302/597849

由于playSilence()是异步的,你不想只是循环一遍,因为它不会等待前一个话语完成。您可以使用tts progress listener知道何时开始新剪辑(或静音)。

另一张海报还suggested将TTS输出写入文件,其播放可以暂停。