2017-09-07 10 views
1

Googleクラウドスピーチに問題があります。 Google Cloud Speechを一時停止して認識を一時停止することはできません。私は現在SpeechRecognizerを停止しています。もう一度それが必要になったら、もう一度起動します。しかし、この方法では、停止は停止するのに多くの時間がかかり、バックグラウンドスレッドで実行する必要があります。何度か、それは時間通りに止まるが、必ずしもそうではない。私は数日間、メインスレッドで使用しましたが、問題はありませんでしたが、現在はフレームをスキップして移動しました。私はそれが瞬時に停止する必要があります。なぜなら、停止後にテキストに音声が続き、認識が停止するまで待っていれば、バックグラウンドスレッドで動かしても、流れが遅く見えるからです。 は、私はそれを起動および停止するために、そのサンプルからのコードを使用しています:Googleクラウド音声ポーズ

認識を開始
private void stopVoiceRecorder() { 
    mNotifyForVoiceEnd.start(); 
    if (mVoiceRecorder != null) { 
     mVoiceRecorder.stop(); 
    } 
    isListening = false; 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      appBar.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.primary)); 

     } 
    }); 
} 

private void startVoiceRecorder() { 
    mNotifyForVoiceStart.start(); 
    if (mVoiceRecorder != null) { 
     mVoiceRecorder.stop(); 
     mVoiceRecorder = null; 
    } 
    mVoiceRecorder = new VoiceRecorder(mVoiceCallback); 
    mVoiceRecorder.start(); 
    isListening = true; 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      appBar.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.tab_not_hearing)); 
     } 
    }); 
} 

私はTraceViewを使用して多くの仕事をして問題が

mVoiceRecorder.stop(); 
です

のコードと.stop()のコード

public void stop() { 
    synchronized (mLock) { 
     if (mThread != null) { 
      mThread.interrupt(); 
      mThread = null; 
     } 

     dismiss(); 
     if (mAudioRecord != null) { 
      mAudioRecord.stop(); 
     } 

    } 
} 

認識を一時停止する方法はありますか?

答えて

1

私は解決策を見つけた:

// Simply delete synchronized (mLock) 

    public void stop() { 

    if (mThread != null) { 
     mThread.interrupt(); 
     mThread = null; 
    } 

    dismiss(); 
    if (mAudioRecord != null) { 
     mAudioRecord.stop(); 
    } 

} 
関連する問題