2012-03-15 13 views
5

Sto tentando di implementare la tecnologia di sintesi vocale di Android nella mia attività. È un semplice gioco di parole e voglio che il motore TTS scriva una singola lettera quando l'utente preme un pulsante. Ad esempio quando l'utente preme il pulsante A Voglio sentire "A".Android TTS (Text-To-Speech) non pronuncia una singola lettera in modo corretto

Il problema è che il metodo .speak accetta una stringa solo come input. Quindi, quando dico al motore TTS che voglio solo una singola stringa, il suono non è la pronuncia della lettera. C'è un modo per farmi pronunciare correttamente le stringhe di una sola lettera?

La soluzione è stata utilizzata come input per le stringhe, parole che sembrano le lettere, ad es. "ape" per B, "vedere" per C e così via. Ma che dire di F, H e così via?

Altre idee?

+0

eff? aitch? Penso che quello che stai facendo potrebbe essere l'unico modo per aggirare questo comportamento. – TheLastBert

+0

Dipende molto dal motore TTS; con la versione 3.10.10 del motore Google TTS, le singole lettere vengono sintetizzate come previsto in inglese. – ozbek

risposta

6

Dopo aver sperimentato molto, ho trovato una soluzione migliore. Per far sì che il motore di Android salvi una singola lettera, devi scriverlo in maiuscolo. Ad esempio "B". In questo modo pronuncerà correttamente! Le uniche eccezioni sono "A" e "Z" che devono essere scritte come "ay" e "zet"!

Spero che questo aiuti

+1

In Motorolo Moto G, con KitKat 4.4.4, con entrambe le voci del Regno Unito e degli Stati Uniti, trovo che ho bisogno di usare "Ae" ("ay" dà il suono "i"). –

0

Ho aggiornato un vecchio test progetto di TTS, quindi sì è il modo in cui tu dici ma mettendo separati da virgola per forzare Pronuncia lettera per lettera, cercavo l'altra opzione che si dice troppo (entrambi sono inclusi qui):

enter image description here

la classe principale sono:

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 ""; 

} 
} 

Controllare il c completato ODE qui:

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

Problemi correlati