2012-03-15 11 views
5

Estoy tratando de implementar la tecnología de texto a voz de Android en mi actividad. Es un juego de palabras simple y quiero que el motor TTS deletree una sola letra cuando el usuario presiona un botón. Por ejemplo, cuando el usuario presiona el botón A, quiero escuchar "A".Android TTS (Text-To-Speech) no pronuncia una sola letra correctamente

El problema es que el método .speak solo toma una cadena como entrada. Entonces, cuando le digo al motor TTS que solo quiero una cadena de una sola letra, el sonido no es la pronunciación de la letra. ¿Hay alguna manera de que pueda pronunciar correctamente las cadenas de una sola letra?

La solución hasta ahora, era usar como entrada de cadena, palabras que suenan como las letras, p. "bee" para B, "ver" para C y así sucesivamente. ¿Pero qué pasa con F, H y así sucesivamente?

¿Alguna otra idea?

+0

ef? aitch? Creo que lo que estás haciendo puede ser la única forma de evitar este comportamiento. – TheLastBert

+0

Esto realmente depende del motor TTS; con Google TTS motor versión 3.10.10, las letras individuales se están sintetizando como se espera en inglés. – ozbek

Respuesta

6

Después de experimentar mucho, encontré una solución mejor. Para que el motor de Android TTS anuncie una sola letra, debe escribirla en mayúsculas. Por ejemplo "B". ¡De esta forma se pronunciará correctamente! ¡Las únicas excepciones son "A" y "Z" que deben escribirse como "ay" y "zet"!

Esperanza esto ayuda

+1

En un Motorolo Moto G, corriendo KitKat 4.4.4, con las voces del Reino Unido y los EE. UU., Creo que necesito usar "Ae" ("ay" da el sonido "i"). –

0

He actualizado un viejo proyecto de la prueba TTS, por lo que sí es cierto lo que dices, pero poniendo separados por comas para forzar letra por letra pronunciación, yo estaba tratando la otra opción que usted dice demasiado (ambos se incluyen aquí):

enter image description here

la clase principal son:

public class SpellUtil { 

public static String convertToSpellOnce(String words) { 
    StringBuilder sb = new StringBuilder(); 
    for (char letter : words.toCharArray()) { 
     sb.append(letter); 
     //sb.append(convertSoundBased(letter)); this is another option 
     sb.append(","); 
    } 
    return sb.toString(); 
} 

private static String convertSoundBased(char letter) { 
    switch (letter) { 
     case 'a': 
      return "a"; 
     case 'b': 
      return "bee"; 
     case 'c': 
      return "cee"; 
     case 'd': 
      return "dee"; 
     case 'e': 
      return "e"; 
     case 'f': 
      return "ef"; 
     case 'g': 
      return "gee"; 
     case 'h': 
      return "aitch"; 
     case 'i': 
      return "i"; 
     case 'j': 
      return "jay"; 
     case 'k': 
      return "kay"; 
     case 'l': 
      return "el"; 
     case 'm': 
      return "em"; 
     case 'n': 
      return "en"; 
     case 'o': 
      return "o"; 
     case 'p': 
      return "pee"; 
     case 'q': 
      return "cue"; 
     case 'r': 
      return "ar"; 
     case 's': 
      return "ess"; 
     case 't': 
      return "tee"; 
     case 'u': 
      return "u"; 
     case 'v': 
      return "vee"; 
     case 'w': 
      return "double-u"; 
     case 'x': 
      return "ex"; 
     case 'y': 
      return "wy"; 
     case 'z': 
      return "zed"; 
    } 
    return ""; 

} 
} 

Compruebe el c completado Oda aquí:

https://github.com/tiveor/android-intermediate/tree/master/SpeechTest

Cuestiones relacionadas