наилучшая практика для определения произношения для Android TTS двигателя? - PullRequest
17 голосов
/ 16 августа 2010

В целом, меня очень впечатлил текстовый речевой движок Android по умолчанию (т. Е. Com.svox.pico).Как и ожидалось, он неправильно произносит некоторые слова (как и я) и поэтому иногда нуждается в руководстве по произношению.Поэтому я задаюсь вопросом о лучших методах фонетического написания тех слов, которые неправильно произносит движок pico TTS.

Например, правильное произношение птицы Chachalaca - CHAH-chah-LAH-kah.Вот то, что производит двигатель TTS:

mTts.speak("Chachalaca", TextToSpeech.QUEUE_ADD, null); // output: chuh-KAL-uh-KUH
mTts.speak("CHAH-chah-LAH-kah", TextToSpeech.QUEUE_ADD, null); // output: CHAH-chah-EL-AY-AYCH-dash-kuh
mTts.speak("CHAHchahLAHkah", TextToSpeech.QUEUE_ADD, null); // output: CHA-chah-LAH-ka
mTts.speak("CHAH chah LOCKah", TextToSpeech.QUEUE_ADD, null); // output: CHAH-chah-LAH-kah

Вот мои вопросы.

  • Есть ли стандартное фонетическое написание, признанное AndroidМеханизм TTS?
  • Если нет, существуют ли какие-либо общие правила для написания пользовательских произношений, которые повышают вероятность написания этих слов в будущих двигателях / версиях TTS?
  • Похоже, что AndroidДвижок TTS игнорирует регистр текста.Как лучше всего указать акцент?

Кстати, вот что пишет движок TTS в logcat:

V / TtsService(294): обработка TTS: CHAH chah LOCKah
V / TtsService (294): TtsService.setLanguage (eng, USA,)
I / SVOX Pico Engine (294): язык уже загружен (en-US ==ru-RU)
I / SynthProxy (294): установка скорости речи на 100
I / SynthProxy (294): установка высоты звука на 100

[ОБНОВЛЕНИЕ]

Я пыталсяПередача XML-документа в TextToSpeech.speak () следующим образом:

            String text = "<?xml version=\"1.0\"?>" +
                "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" " +
                    "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
                    "xsi:schemaLocation=\"http://www.w3.org/2001/10/synthesis " +
                        "http://www.w3.org/TR/speech-synthesis/synthesis.xsd\" " +
                    "xml:lang=\"en-US\">" +

                    "That is a big car! " +
                    "That <emphasis>is</emphasis> a big car! " +
                    "That is a <emphasis>big</emphasis> car! " +
                    "That is a huge bank account! " +
                    "That <emphasis level=\"strong\">is</emphasis> a huge bank account! " +
                    "That is a <emphasis level=\"strong\">huge</emphasis> bank account!" +
                "</speak>";
            mTts.speak(text, TextToSpeech.QUEUE_ADD, null);

Как предположила Android Eve, движок TTS читает только тело XML (то есть комментарии о большой машине и огромном банковском счете),Я не осознавал, что механизм TTS способен анализировать XML-документы.Однако я не слышал никакого акцента в выводе TTS.

[ОБНОВЛЕНИЕ 2]

Я упростил вопрос о том, поддерживает ли Android TTS язык разметки речи здесь .

Ответы [ 2 ]

7 голосов
/ 06 сентября 2010

JW ответил на мой вопрос в группе tts-for-android :

Привет, Грег,

Механизм Pico распознает тег с алфавитом XSAMPA.

Нет простых правил для получения определенного произношения из орфографии, но вы можете использовать интуитивное написание и метод проб и ошибок.Использование заглавных букв и дефисов принесет больше проблем, чем их решение.Использование различных вариантов написания и введение дополнительных границ слов (пробелов) может работать.

Метка выделения и восклицательный знак не изменят результат синтеза.Вместо этого используйте команды, и.


Некоторые примеры правильного синтаксиса для задания произношения с использованием тега фонемы SSML приведены в этих тестах TextToSpeech .

Даже с этими простыми тестовыми документами SSML в logcat публикуются предупреждающие сообщения о том, что документ SSML сформирован неправильно.Поэтому я открыл вопрос об этих, казалось бы, некорректных сообщениях logcat для системы отслеживания проблем Android .


Синтаксис для указания последовательности x-SAMPA для SVOX pico:

String text = "<speak xml:lang=\"en-US\"> <phoneme alphabet=\"xsampa\" ph=\"d_ZIn\"/>.</speak>";
mTts.speak(text, TextToSpeech.QUEUE_ADD, null); 

Хотя было бы полезно больше примеров, хорошая ссылка для x-SAMPA - http://en.wikipedia.org/wiki/Xsampa Если я соберу пару десятков примеров, я опубликую их на этой странице Википедии.

1 голос
/ 17 августа 2010

Один ответ на все 3 вопроса: Посмотрите спецификации SSML: http://www.w3.org/TR/speech-synthesis/

Например, чтобы указать выделение, вы используете элемент emphasis , например

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="en-US">
  That is a <emphasis> big </emphasis> car!
  That is a <emphasis level="strong"> huge </emphasis>
  bank account!
</speak>
...