2015-04-10 5 views
0

Я работаю над небольшим приложением, которое дает пользователю возможность «поговорить» с несколькими командами, на которые приложение ответит.android text to speech 0 поддерживаемых языков на nexus 7

У меня есть распознавание речи и зарегистрированные команды. Они признаются и, во что бы то ни стало, ответ должен быть воспроизведен.

Только вопрос: это не так.

вот немного кода я использую, чтобы определить, какие языки поддерживаются TTS Engine Google (я разрабатываю для более старой версии андроида так «tts.getAvailableLangues()» не там, к сожалению):

Locale[] locales = Locale.getAvailableLocales(); 
    List<Locale> localeList = new ArrayList<Locale>(); 
    for (Locale locale : locales) { 
     int res = speaker.isLanguageAvailable(locale); 
     if (res == TextToSpeech.LANG_COUNTRY_AVAILABLE) { 
      Log.d(tag, "language: " + locale); 
      localeList.add(locale); 
     } 
    } 
    Log.d(tag, "languages available: " + localeList.size()); 

выход этого последнего журнала всегда: «языки доступны: 0»

И действительно, если я запускаю этот кусок кода:

int id = speaker.setLanguage(Locale.ENGLISH); 
checkId(id); 

Он придет ба ck с ошибкой «язык не поддерживается». Что странно, учитывая, что я только пытаюсь использовать один из языков по умолчанию: английский (Великобритания, США, не имеет значения, «не поддерживается»).

Таким образом, очевидно, когда я пытаюсь запустить

speaker.getLanguage(); 

возвращает нуль ...

Даже незнакомец, что InitListener всегда сообщает "TextToSpeech.SUCCESS"

private OnInitListener listener = new OnInitListener() { 

    @Override 
    public void onInit(int status) { 
     if (status == TextToSpeech.SUCCESS) { 
      Log.d(TAG, "tts engine started succesfully"); 
     } else if (status == TextToSpeech.ERROR) { 
      Log.d(TAG, "seems like an error occured :c"); 
     } 

    } 

}; 

Итак, журнал всегда показывает: «tts engine начал успешно».

И это фактический код я использую для запуска ТТС:

public void speak(String text, Context context, OnInitListener listener) { 
    String tag = "dashboardactivity"; 
    Log.d(tag, "speaking started in dummy module"); 
    TextToSpeech speaker = new TextToSpeech(context, listener); 

    // int id = speaker.setLanguage(Locale.UK); 
    int id = speaker.setLanguage(Locale.ENGLISH); 

    speaker.speak(text, TextToSpeech.QUEUE_FLUSH, null); 
} 

Там, кажется, не будет ничего плохого в том, что код, или я что-то отсутствует?

Вот список вещей, которые я пробовал/проверить/установлено: установлены

  • TTS установлен
  • голосовых данных (несколько голосов для Великобритании и США английского)
  • если нажать «слушать пример» в настройках, которые он работает!

Итак, откуда я сижу, нет причин, чтобы он не работал. Мой вопрос:

  • Я что-то не хватает? (специальные разрешения? некоторые данные?)
  • Почему мой код говорит, что двигатель tts поддерживает 0 языков из 400-то «локалей»?
  • как я могу это исправить?

ответ

0

ОК, я исправил его.Я не думал о времени, когда движок tts должен инициализировать себя, поэтому я просто назвал «говорить» сразу после его создания.

Теперь я перешел к слушателю OnInit и престо: он работает!

Вот мой OnInitListener Сейчас:

private OnInitListener listener = new OnInitListener() { 

    @Override 
    public void onInit(int status) { 
     if (status == TextToSpeech.SUCCESS) { 
      Log.d(TAG, "tts engine started succesfully"); 
      Log.d(TAG, "setting language to default"); 
      int id = tts.setLanguage(Locale.getDefault()); 
      checkId(id); 
      tts.speak(mMessageToSpeak, TextToSpeech.QUEUE_FLUSH, null); 
     } else if (status == TextToSpeech.ERROR) { 
      Log.d(TAG, "seems like an error occured :c"); 
     } 

    } 

}; 

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

  • Нет связанных вопросов^_^