У меня проблема с 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();
}
}
}
Есть ли способ приостановить распознавание?