Подтвердить что ты не робот

Могу ли я держать прослушиватель речи бесконечно?

Когда я вызываю метод startListening объекта SpeechRecognizer, распознаватель речи начинает прослушивать речь. Я хотел бы создать службу, ожидающую речи определенного ключевого слова: когда пользователь говорит это ключевое слово, а распознаватель речи обнаруживает это ключевое слово, служба становится готовой к принятию голосовых команд пользователя.

С этой целью, после создания нового SpeechRecognizer, я должен вызвать его метод startListening: могу ли я продолжать прослушивать распознавание речи бесконечно?

4b9b3361

Ответ 1

Android Speech recognizer можно настроить с помощью дополнительных данных. См. документацию по Android.

public static final String EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS

Время, которое оно должно принять после того, как мы прекратим слушание речи рассмотрим ввод завершен. [...]

public static final Строка EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLISПоскольку: Уровень API 8

Минимальная длина высказывания. Мы не прекращаем запись до это количество времени. [...]

public static final Строка EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS

Время, которое оно должно принять после того, как мы прекратим слушание речи рассмотрите возможность ввода возможно. [...]

Установите EXTRA_LANGUAGE_MODEL в веб-поиск, чтобы отображать только соответствующие слова.

Ответ 2

Вы можете реализовать интерфейс onError RecognitionListener следующим образом. Он постоянно слушает вашу деятельность.

@Override
public void onError(int error) {
    String errorMessage = getErrorText(error);
    Log.i(Constants.TAG, "FAILED " + errorMessage);
    speech.destroy();
    speech = null;
    StartListening();
}

private void StartListening() {
    speech = SpeechRecognizer.createSpeechRecognizer(this);
    speech.setRecognitionListener(this);
    recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en");
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName());
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);

    //if setting.SpeechEnable
    speech.startListening(recognizerIntent);
}