Android TTS (Text-To-Speech) неправильно произносит одну букву - PullRequest
5 голосов
/ 15 марта 2012

Я пытаюсь внедрить технологию преобразования текста в речь Android в моей Деятельности.Это простая игра в слова, и я хочу, чтобы движок TTS записывал одну букву, когда пользователь нажимает какую-то кнопку.Например, когда пользователь нажимает кнопку A , я хочу услышать «A».

Проблема в том, что метод .speak принимает только строку в качестве входных данных.Таким образом, когда я говорю движку TTS, что я просто хочу строку из одной буквы, звук не является произношением буквы.Можно ли как-нибудь заставить его правильно произносить строки из одной буквы?

Решение до сих пор заключалось в использовании в качестве строкового ввода слов, которые звучат как буквы, например, "пчела" для B , "см." Для C искоро.Но как насчет F , H и так далее?

Есть еще идеи?

Ответы [ 2 ]

6 голосов
/ 16 марта 2012

После долгих экспериментов я нашел лучшее решение. Для того, чтобы движок Android tts объявил одну букву, вы должны написать ее заглавными буквами. Например "B". Таким образом, он будет произносить правильно! Единственными исключениями являются «A» и «Z», которые должны быть записаны как «ay» и «zet»!

Надеюсь, это поможет

1 голос
/ 14 октября 2016

Я обновил старый проект, тестирующий 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 "";

}
}

Проверьте полный код здесь:

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

...