Android TTS (преобразование текста в речь) неправильно произносит одну букву

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

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

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

Любые другие идеи?


person Nick    schedule 15.03.2012    source источник
comment
эфф? аич? Я думаю, что то, что вы делаете, может быть единственным способом обойти это поведение.   -  person TheLastBert    schedule 15.03.2012
comment
Это действительно зависит от движка TTS; с Google TTS Engine версии 3.10.10 отдельные буквы синтезируются, как и ожидалось, на английском языке.   -  person ozbek    schedule 12.10.2016


Ответы (2)


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

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

person Nick    schedule 16.03.2012
comment
На Motorolo Moto G с KitKat 4.4.4 и голосами для Великобритании и США я обнаружил, что мне нужно использовать Ae (ay дает звук i). - person James Newton; 07.12.2014

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

person alvarodev    schedule 14.10.2016