2017-09-07 2 views
1

J'ai un problème avec Google Cloud Speech. Je ne peux pas faire une pause dans Google Cloud Speech, pour mettre en pause la reconnaissance que je suis en train d'éteindre le SpeechRecognizer, et quand j'en ai besoin à nouveau, je le relance. Mais de cette façon, l'arrêt prend beaucoup de temps pour s'arrêter, et je dois courir dans le fil de fond. Parfois, il s'arrête juste à temps, mais pas toujours. Depuis quelques jours je l'utilise sur le Main Thread je n'ai pas de problèmes avec ça mais maintenant il a commencé à sauter des frames donc je l'ai déplacé. J'en ai besoin d'un arrêt instantané car après l'arrêt est suivi par un discours au texte, et si j'attends que la reconnaissance soit arrêtée, le flux semblera laggy même si je l'ai déplacé sur le fil de fond. J'utilise le code de leur échantillon, pour démarrer et arrêter:Pause Google Cloud Disc

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

     } 
    }); 
} 

Démarrage de la reconnaissance:

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

je TraceView et le problème faire beaucoup de travail est

mVoiceRecorder.stop(); 

et le code à .stop()

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

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

    } 
} 

Y at-il un moyen de mettre en pause la reconnaissance?

Répondre

1

J'ai trouvé la solution:

// Simply delete synchronized (mLock) 

    public void stop() { 

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

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

}