【问题标题】:Android TTS (Text-To-Speech) doesn't pronounce single letter correctlyAndroid TTS (Text-To-Speech) 不能正确发音单个字母
【发布时间】:2016-10-14 10:37:08
【问题描述】:

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

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

目前的解决方案是使用字符串输入,听起来像字母的单词,例如B 为“bee”,C 为“see”,依此类推。但是FH等等呢?

还有其他想法吗?

【问题讨论】:

  • 有效吗?痒吗?我认为您正在做的事情可能是解决这种行为的唯一方法。
  • 这真的取决于TTS引擎;使用 Google TTS 引擎 3.10.10 版,可以按预期以英语合成单个字母。

标签: android text-to-speech


【解决方案1】:

经过大量试验,我找到了更好的解决方案。为了让android tts引擎宣布一个字母,你必须用大写字母写它。例如“B”。这样它会正确发音!唯一的例外是“A”和“Z”,它们必须写成“ay”和“zet”!

希望对你有帮助

【讨论】:

  • 在运行 KitKat 4.4.4 的 Motorolo Moto G 上,同时具有英国和美国的声音,我发现我需要使用“Ae”(“ay”发出声音“i”)。
【解决方案2】:

我已经更新了一个测试 TTS 的旧项目,所以是的就是你说的方式,但是用逗号分隔以强制逐字母发音,我也在尝试你说的另一个选项(两者都包括在这里):

主要类有:

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

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2019-08-11
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多