2015-01-04 2 views
0

Я использую Google TTS Engine для преобразования текста в речь для языка хинди.Как проверить, установлены ли голосовые данные Google TTS для языка хинди

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
    case ACTIVITY_TTS_PASS: 
     if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 
      tts = new TextToSpeech(getApplicationContext(), this); 
      int availability = tts.isLanguageAvailable(new Locale("hin-IND")); 
      switch(availability) { 
      case TextToSpeech.LANG_AVAILABLE: 
       Log.d("TTS", "Language available"); 
       break; 
      case TextToSpeech.LANG_NOT_SUPPORTED: 
       Log.d("TTS", "Language not supported"); 

       Intent installTTSIntent = new Intent(); 
       installTTSIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
       ArrayList<String> languages = new ArrayList<String>(); 
       languages.add("hin-IND"); // hin - hindi, IND - INDIA 
       installTTSIntent.putStringArrayListExtra(
         TextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR, languages); 
       startActivity(installTTSIntent); 
       break; 
      case TextToSpeech.LANG_MISSING_DATA: 
       Log.d("TTS", "Language missing data"); 
       break; 
      case TextToSpeech.LANG_COUNTRY_AVAILABLE: 
       Log.d("TTS", "Contry available"); 
       break; 
      default: 
       Log.d("TTS", "default"); 
      } 
     } 
     else { 
      Log.d("TTS", "fail"); 
      Intent installTTSIntent = new Intent(); 
      installTTSIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
      ArrayList<String> languages = new ArrayList<String>(); 
      languages.add("hin-IND"); // hin - hindi, IND - INDIA 
      installTTSIntent.putStringArrayListExtra(
        TextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR, languages); 
      startActivity(installTTSIntent); 
     } 

     break; 
    default: 
     Log.d("TTS", "case default"); 
     break; 
    } 
    super.onActivityResult(requestCode, resultCode, data); 

} 

Вот как я могу проверить, установлены ли данные TTS и поддерживается ли язык хинди. Это намерение дает возможность установить голосовые данные для некоторых языков. Затем я выбрал хинди (Индия) и установил.

Даже после этого tts.isLanguageAvailable (новый язык («hin-IND»)); возвращает TextToSpeech.LANG_NOT_SUPPORTED.

Кроме того, с помощью «hi-IN» вместо «hin-IND», он дает тот же результат. Теперь установлены голосовые данные, но как я могу проверить его по коду?

ответ

1

«hi_IN» - это язык для хинди (Индия). Проверка доступности tts.isLanguageAvailable (новый язык («привет-IN»)) отлично работает после вызова метода inInit (int result). Поэтому инициируйте экземпляр tts в методе onActivityResult и проверьте наличие в методе onInit.

ОБНОВЛЕНИЕ 2017 Позитивный код для использования TTS по запросу.

Чтобы проверить TTS данных существует:

Intent checkIntent = new Intent(); 
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 

метод OnActivityResult будет называться

protected void onActivityResult(
     int requestCode, int resultCode, Intent data) { 
    if (requestCode == MY_DATA_CHECK_CODE) { 
     if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 
      // success, create the TTS instance 
      initTTS(); 
     } else { 
      // missing data, install it 
      Intent installIntent = new Intent(); 
      installIntent.setAction(
       TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
      ArrayList<String> languages = new ArrayList<String>(); 
      languages.add("hin-IND"); // hin - hindi, IND - INDIA 
      installIntent.putStringArrayListExtra(
        TextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR, languages); 
      startActivity(installIntent); 
     } 
    } 
} 
метод

initTTS выглядит следующим образом:

private TextToSpeech mTts; 
public void initTTS() { 
    //mTts = new TextToSpeech(this, this); 
    mTts = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() { 
     @Override 
     public void onInit(int status) { 
      if(status != TextToSpeech.ERROR) { 

       int isLanguageAvailable = t1.isLanguageAvailable(new Locale("hi_IN")); 
       switch (isLanguageAvailable) { 
        case TextToSpeech.LANG_AVAILABLE: 
         //t1.setLanguage(Locale.UK); 
         t1.setLanguage(new Locale("hin")); 
         t1.setPitch(1.2f); 
         t1.setSpeechRate(0.8f); 
         Toast.makeText(context, "हाँ, मैं हिंदी बोल सकता हूँ", Toast.LENGTH_LONG).show(); 
         t1.speak("हाँ, मैं हिंदी बोल सकता हूँ", TextToSpeech.QUEUE_FLUSH, null,null); 

         break; 
       } 
      } else { 
       Toast.makeText(context, "TTS initialization Failed", Toast.LENGTH_LONG).show(); 
      } 
     } 
    }); 
} 
+0

вы можете разместить свой код, потому что мне нужно проверьте, где пользовательское устройство поддерживает хинди или нет – Hamza

+0

@AmeerHamza обновил мой ответ – Gaurav

+0

для чего используется 'ACTION_CHECK_TTS_DATA'? вы не задали никаких дополнительных заданий, как узнать, какой язык проверить? – user924

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