Пауза в Google Cloud Speech

У меня проблема с Google Cloud Speech. Я не могу приостановить Google Cloud Speech, чтобы приостановить распознавание, я в настоящее время выключаю SpeechRecognizer, и когда он мне снова понадобится, я запускаю его снова. Но в этом случае остановка занимает много времени, и мне приходится работать в фоновом потоке. Иногда он останавливается вовремя, но не всегда. В течение нескольких дней, которые я использовал в основном потоке, у меня не было никаких проблем с ним, но теперь он начал пропускать кадры, поэтому я переместил его. Мне нужна мгновенная остановка, потому что после остановки следует преобразование речи в текст, и если я дождусь остановки распознавания, поток будет выглядеть медленным, даже если я переместил его в фоновый поток. Я использую код из их образца, чтобы запустить и остановить его:

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

    }
}

Есть ли способ приостановить распознавание?


person Sz-Nika Janos    schedule 07.09.2017    source источник


Ответы (1)


Я нашел решение:

 // Simply delete   synchronized (mLock)

   public void stop() {

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

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

}
person Sz-Nika Janos    schedule 13.09.2017