2016-04-26 2 views
5

Я использую Google API для распознавания речи, но хочу ограничить время прослушивания. Например, две секунды. Через две секунды, хотя пользователь продолжает распознавать разговоры, должен прекратить прослушивание. Я попробовал несколько дополнительных услуг, какAndroid - распознавание речи Ограничивающее время прослушивания

EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS

, но это не помогло мне. Мой полный код здесь, если кто-нибудь может мне помочь, я буду ценить

public void promptSpeechInput() 
{ 
    //This intent recognize the peech 
    Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 
    i.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say Something"); 

    try { 
     startActivityForResult(i, 100); 
    } 
    catch (ActivityNotFoundException a) 
    { 
     Toast.makeText(MainActivity.this,"Your device does not support",Toast.LENGTH_LONG).show(); 
    } 
} 

//For receiving speech input 
public void onActivityResult(int request_code, int result_code, Intent i) 
{ 
    super.onActivityResult(request_code, result_code, i); 

    switch (request_code) 
    { 
     case 100: if(result_code == RESULT_OK && i != null) 
     { 
      ArrayList<String> result = i.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
      resultTEXT.setText(result.get(0)); 
     } 
      break; 
    } 
} 

ответ

2

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

Я тоже искал решение этой проблемы. Поэтому я надеюсь, что, возможно, вы найдете лучшее. Я нашел этот пост из другого StackOverflow партнера:

SpeechRecognizer Time Limit

Там он предложить следующую возможность, чтобы исправить вашу проблему:

Лучше бы нить какой-то таймер, что-то вроде CountDownTimer:

yourSpeechListener.startListening(yourRecognizerIntent); 
new CountDownTimer(2000, 1000) { 

public void onTick(long millisUntilFinished) { 
    //do nothing, just let it tick 
} 

public void onFinish() { 
    yourSpeechListener.stopListening(); 
} }.start(); 

в другой способ, чтобы сделать ваш SpeechRecognition Короче говоря, лет и можно добавить следующий параметр к вашему Intent: EXTRA_PARTIAL_RESULTS

Это позволит получить частичные результаты от вашего SpeechRecognizer, что означает, что ваш methor onActivityPartialResult вернет вам другой массив со значением спичек. Этот метод вызывается до onActivityResults и его более быстрый, но, конечно, не такой точный, как onActivityResult. Так что это просто поможет вам, если ваш слушатель ищет конкретное слово.

Надеюсь, что это поможет вам с вашим приложением!

Удачи!

+0

Спасибо, Francisco, я попробую – ysfcyln

Смежные вопросы