2017-09-07 8 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)); 

     } 
    }); 
} 

시작 : 내가 시작하고 중지, 자신의 샘플에서 코드를 사용하고 내가 TraceView과 많은 작업을하고 문제를 사용

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

것은

mVoiceRecorder.stop(); 
입니다

및 .stop()의 코드

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

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

    } 
} 

인식을 일시 중지 할 수있는 방법이 있습니까?

// Simply delete synchronized (mLock) 

    public void stop() { 

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

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

} 
:

답변

1

나는 해결책을 발견