2017-09-07 2 views
1

Ich habe ein Problem mit Google Cloud Speech. Ich kann Google Cloud Speech nicht pausieren, um die Erkennung anzuhalten. Ich sperre gerade den SpeechRecognizer herunter, und wenn ich ihn wieder brauche, beginne ich ihn erneut. Aber auf diese Weise dauert das Stoppen viel Zeit, und ich muss im Hintergrundthread laufen. Manchmal stoppt es rechtzeitig, aber nicht immer. Für ein paar Tage habe ich in Main Thread verwendet ich habe keine Probleme damit, aber jetzt fing es an Frames zu überspringen, also habe ich es bewegt. Ich brauche es sofort zu stoppen, weil nach dem stop von Speech to text gefolgt wird, und wenn ich warte, bis die Erkennung gestoppt wird, wird der Fluss lückenhaft aussehen, auch wenn ich ihn auf den Hintergrund-Thread verschoben habe. ich den Code aus ihrer Probe verwenden, um es zu starten und stoppen:Google Cloud Sprachpause

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

     } 
    }); 
} 

die Anerkennung Beginn:

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

ich Traceview und das Problem zu tun, viel Arbeit verwendet wird, ist

mVoiceRecorder.stop(); 

und der Code zu .stop()

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

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

    } 
} 

Gibt es eine Möglichkeit, die Erkennung anzuhalten?

Antwort

1

fand ich die Lösung:

// Simply delete synchronized (mLock) 

    public void stop() { 

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

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

}