2014-03-26 19 views
0

我有一個小程序,它在for循環中使用TTS。 我創建了一個按鈕,通過tts.stop()來停止TTS。 有沒有辦法暫停TTS,如果我點擊按鈕。停止的問題是,我不能恢復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

你有沒有考慮playing a silence的暫停時間,像你這樣的話語之間呢?以前的答案:https://stackoverflow.com/a/11079302/597849

因爲playSilence()是異步的,所以你不想循環一堆次,因爲它不會等待先前的話語完成。您可以使用tts progress listener來了解何時開始新剪輯(或靜音)。

另一張海報還有suggested將TTS輸出寫入文件,其播放可以暫停。

+0

public void verlaufKlick(View view){ \t \t tts.playSilence(3000,TextToSpeech.QUEUE_ADD,null); }我嘗試這個,但它不工作。 – basti12354

+1

要中斷現有的播放,你需要使用QUEUE_FLUSH,所以這不是一個真正的停頓,不幸的是。 – Turnsole

+0

你有一個想法,我可以如何使用它。 while(pause == true){tts.playSilence(3000,TextToSpeech.QUEUE_FLUSH,null);} public Boolean verlaufKlick(View view){return pause = true}如果將錯誤代碼添加到我的文章中,它不起作用! – basti12354