2017-09-07 53 views
1

我遇到Google云语音问题。我无法暂停Google Cloud Speech,暂停我正在关闭SpeechRecognizer的识别功能,当我再次需要时,我再次启动它。但这样,Stopping需要很多时间来停止,我必须在后台线程中运行。有时它会及时停止,但并非总是如此。对于我在主线程中使用的几天,我没有任何问题,但现在它开始跳过帧,所以我把它移动了。我需要它立即停止,因为停止后跟着语音到文本,并且如果我等到识别停止,那么即使我将它移动到后台线程上,流程也会显得迟缓。 我使用的代码从他们的样品,启动和停止它: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(); 
    } 

}