Obtener locales disponibles para tts

Estoy trabajando en una implementación de texto a voz de un programa de flashcard. Debe leerse el texto en diferentes idiomas. Para hacer esto correctamente el usuario tiene que seleccionar el idioma del texto para leer (se almacenará y utilizará más tarde sin duda).

¿Existe alguna posibilidad de obtener los tts-languages disponibles en un sistema android? Si no, ¿existe la posibilidad de obtener todas las localidades disponibles en el sistema?

¡gracias por su consejo!

Editar: Supongo que lo tengo: getAvailableLocales() y tts.isLocaleAvailable(locale)

3 Solutions collect form web for “Obtener locales disponibles para tts”

Puede encontrar toda la configuración local del dispositivo utilizando la siguiente función.

 Locale loc = new Locale("en"); Log.i("-------------",Arrays.toString(loc.getAvailableLocales())); 

Salida

 I/-------------( 4390): [ar, ar_EG, bg, bg_BG, ca, ca_ES, cs, cs_CZ, da, da_DK, de, de_AT, de_BE, de_CH, de_DE, de_LI, de_LU, el, el_CY, el_GR, en, en _AU, en_BE, en_BW, en_BZ, en_CA, en_GB, en_HK, en_IE, en_IN, en_JM, en_MH, en_MT, en_NA, en_NZ, en_PH, en_PK, en_RH, en_SG, en_TT, en_US, en_US_POSIX, en_VI, en_ZA, en_ZW, es, es_AR, es_BO, es_CL, es_CO, es_CR, es_DO, es_EC, es_ES, es_GT, es_HN, es_MX, es_NI, es_PA, es_PE, es_PR, es_PY, es_SV, es_US , es_UY, es_VE, et, et_EE, eu, eu_ES, fa, fa_IR, fi, fi_FI, fr, fr_BE, fr_CA, fr_CH, fr_FR, fr_LU, fr_MC, gl, gl_ES, hr, hr_HR, hu, hu_HU, in, in_ID, is, is_IS, it, it_CH, it_IT, iw, iw_IL, ja, ja_JP, kk, kk_KZ, ko, ko_KR, lt, lt_LT, lv, lv_LV, mk, mk_MK, ms, ms_BN, ms_MY, nl, nl_BE, nl_NL, no, no_N O, no_NO_NY, pl, pl_PL, pt, pt_BR, pt_PT, ro, ro_RO, ru, ru_RU, ru_UA, sh, sh_BA, sh_CS, sh_YU, sk, sk_SK, sl, sl_SI, sq, sq_AL, sr, sr_BA, sr_ME, sr_ RS, sv, sv_FI, sv_SE, th, th_TH, tr, tr_TR, uk, uk_UA, vi, vi_VN, zh, zh_CN, zh_HK, zh_HANS_SG, zh_HANT_MO, zh_MO, zh_TW] 

Alguien más ha hecho el trabajo duro, en http://kaviddiss.com/2012/08/12/android-text-to-speech-languages/

Para ahorrar tiempo, he aquí su extracto de código

 TextToSpeech tts = ... // let's assume tts is already inited at this point: Locale[] locales = Locale.getAvailableLocales(); List<Locale> localeList = new ArrayList<Locale>(); for (Locale locale : locales) { int res = tts.isLanguageAvailable(locale); if (res == TextToSpeech.LANG_COUNTRY_AVAILABLE) { localeList.add(locale); } } // at this point the localeList object will contain // all available languages for Text to Speech 

Los resultados dependen del motor TTS que se haya seleccionado. Por ejemplo, uno de mis teléfonos incluye los motores Pico-TTS y Google-texto-a-voz.

Q-Smart (Teléfono vietnamita con Google TTS como motor seleccionado)

 D/SpeakRepeatedly( 3979): Engine Google Text-to-speech Engine:com.google.android.tts D/SpeakRepeatedly( 3979): Engine Pico TTS:com.svox.pico D/SpeakRepeatedly( 3979): German (Germany):German:de_DE D/SpeakRepeatedly( 3979): English (United Kingdom):English:en_GB D/SpeakRepeatedly( 3979): English (United States):English:en_US D/SpeakRepeatedly( 3979): English (United States,Computer):English:en_US_POSIX D/SpeakRepeatedly( 3979): Spanish (Spain):Spanish:es_ES D/SpeakRepeatedly( 3979): French (France):French:fr_FR D/SpeakRepeatedly( 3979): Italian (Italy):Italian:it_IT D/SpeakRepeatedly( 3979): Portuguese (Brazil):Portuguese:pt_BR D/SpeakRepeatedly( 3979): Portuguese (Portugal):Portuguese:pt_PT 

Y con Pico seleccionado

 D/SpeakRepeatedly( 4837): Engine Google Text-to-speech Engine:com.google.android.tts D/SpeakRepeatedly( 4837): Engine Pico TTS:com.svox.pico D/SpeakRepeatedly( 4837): German (Germany):German:de_DE D/SpeakRepeatedly( 4837): English (United Kingdom):English:en_GB D/SpeakRepeatedly( 4837): English (United States):English:en_US D/SpeakRepeatedly( 4837): English (United States,Computer):English:en_US_POSIX D/SpeakRepeatedly( 4837): Spanish (Spain):Spanish:es_ES D/SpeakRepeatedly( 4837): French (France):French:fr_FR D/SpeakRepeatedly( 4837): Italian (Italy):Italian:it_IT 

Nota: El portugués no aparece en la interfaz de usuario de configuración de TTS. Cuando elijo portugués programaticamente en mi aplicación que habla con un acento portugués! FWIW aquí está mi código para seleccionar el portugués (acepta tanto locales brasileños como portugueses).

 if (locale.getDisplayName().startsWith("Portuguese")) { Log.i(SPEAK_REPEATEDLY, "Setting Locale to: " + locale.toString()); tts.setLanguage(locale); } } 

Dado que diferentes motores TTS devuelven resultados diferentes para isLanguageAvailable , he descubierto que la siguiente solución funciona mejor en varios motores TTS comunes.

Tenga en cuenta también que a partir de Android Lollipop, hay un método simple en TextToSpeech llamado getAvailableLanguages que hace que fácilmente para usted (si el dispositivo está ejecutando API 21 o posterior).

Es necesario llamar a los métodos siguientes en el método onInit de su OnInitListener asignado al objeto TextToSpeech .

 ArrayList<Locale> languages; TextToSpeech initTTS; private void initSupportedLanguagesLollipop() { Set<Locale> availableLocales = initTTS.getAvailableLanguages(); for (Locale locale : availableLocales) { languages.add(locale); } } private void initSupportedLanguagesLegacy() { Locale[] allLocales = Locale.getAvailableLocales(); for (Locale locale : allLocales) { try { int res = initTTS.isLanguageAvailable(locale); boolean hasVariant = (null != locale.getVariant() && locale.getVariant().length() > 0); boolean hasCountry = (null != locale.getCountry() && locale.getCountry().length() > 0); boolean isLocaleSupported = false == hasVariant && false == hasCountry && res == TextToSpeech.LANG_AVAILABLE || false == hasVariant && true == hasCountry && res == TextToSpeech.LANG_COUNTRY_AVAILABLE || res == TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE; Log.d(TAG, "TextToSpeech Engine isLanguageAvailable " + locale + " (supported=" + isLocaleSupported + ",res=" + res + ", country=" + locale.getCountry() + ", variant=" + locale.getVariant() + ")"); if (true == isLocaleSupported) { languages.add(locale); } } catch (Exception ex) { Log.e(TAG, "Error checking if language is available for TTS (locale=" + locale +"): " + ex.getClass().getSimpleName() + "-" + ex.getMessage()); } } } 
  • Android texto a voz es muy lento para inicializar
  • TextToSpeech versión de compilación android no reproduce audio
  • Android TTS Masculino Masculino Voz Cambio
  • Cómo dar pausa o brecha entre palabras en TTS en android
  • Problema con isSpeaking () cuando se utiliza Text-to-Speech en Android
  • ¿Cómo puedo controlar cómo Android TTS reproduce audio?
  • Otras opciones de la biblioteca de Android TextToSpeech
  • Cómo deshabilitar la accesibilidad "TalkBack" en su aplicación?
  • Cómo cambiar la voz de un motor TTS
  • TTS-UtteranceProgressListener no se llama
  • Ampliación del paquete de idiomas de texto a voz (TTS) de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.