Могу ли я держать прослушиватель речи бесконечно?
Когда я вызываю метод startListening
объекта SpeechRecognizer
, распознаватель речи начинает прослушивать речь. Я хотел бы создать службу, ожидающую речи определенного ключевого слова: когда пользователь говорит это ключевое слово, а распознаватель речи обнаруживает это ключевое слово, служба становится готовой к принятию голосовых команд пользователя.
С этой целью, после создания нового SpeechRecognizer
, я должен вызвать его метод startListening
: могу ли я продолжать прослушивать распознавание речи бесконечно?
Ответы
Ответ 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);
}