2012-03-15 91 views
5

我正在尝试在我的Activity中实现Android的文本转语音技术。这是一个简单的文字游戏,我希望TTS引擎在用户按下某个按钮时拼出单个字母。例如,当用户按下按钮时,我想听到“A”。Android TTS(文本到语音转换)不能正确发音单个字母

问题是.speak方法只接受一个字符串作为输入。所以,当我告诉TTS引擎我只想要一个字母字符串时,声音不是字母的发音。有没有什么方法可以使单字母字符串正确发音?

到目前为止,解决方案是使用字符串输入,听起来像字母的单词,例如, “蜜蜂”为B,“见”为C等。但F,H等等呢?

还有其他想法吗?

+0

eff? aitch?我认为你正在做的事可能是解决这个问题的唯一方法。 – TheLastBert 2012-03-15 12:27:27

+0

这真的取决于TTS引擎;与谷歌TTS引擎版本3.10.10,单个字母正在合成如预期的英文。 – ozbek 2016-10-12 03:05:40

回答

6

实验了很多之后,我找到了一个更好的解决方案。为了让android tts引擎发出一个字母,你必须用大写字母来写。例如“B”。这样它会发音正确!唯一的例外是必须写成“ay”和“zet”的“A”和“Z”!

希望这有助于

+1

在Motorolo Moto G上运行KitKat 4.4.4,同时播放英国和美国的声音,我发现我需要使用“Ae”(“ay”声音为“i”)。 – 2014-12-07 16:19:31

0

我已经更新了旧项目的测试TTS,所以是的,你说的方法,但把逗号分隔通过信函给力发音信,我是想,你说的太对其他选项(这里包含这两者):

enter image description here

主要类有:

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

} 
} 

检查已完成 - Ode here:

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