我正在尝试在我的Activity中实现Android的文本到语音技术。这是一个简单的文字游戏,当用户按下某个按钮时,我希望TTS引擎拼写单个字母。例如,当用户按下 A 按钮时,我想听到“A”。
问题是.speak
方法只接受String作为输入。所以,当我告诉TTS引擎我只想要一个单字母字符串时,声音不是字母的发音。有什么方法可以让它正确地发出单字母字符串吗?
到目前为止,解决方案是用作字符串输入,听起来像字母的单词,例如 B 的“bee”, C 的“see”等等。但是 F , H 等等呢?
还有其他想法吗?
答案 0 :(得分:6)
经过多次试验,我找到了更好的解决方案。为了让android tts引擎响起一个字母,你必须用大写字母来编写它。例如“B”。这样它会正确发音!唯一的例外是“A”和“Z”,必须写成“ay”和“zet”!
希望这有帮助
答案 1 :(得分:0)
我已经更新了一个测试TTS的老项目,所以是你说的方式,但是将逗号分开以逐字逐句强制发音,我正在尝试你也说的另一个选项(两者都包含在这里):< / p>
主要课程是:
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 "";
}
}
点击此处查看完成的代码:
https://github.com/tiveor/android-intermediate/tree/master/SpeechTest