Рекомендации по выбору произношения для Android TTS engine?
В целом, меня очень впечатляет механизм преобразования текста в речь по умолчанию 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, США)
I/SVOX Pico Engine (294): Язык уже загружен (en-US == en-US)
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 язык разметки Speech Synthesis здесь.
Ответы
Ответ 1
JW ответил на мой вопрос в группе tts-for-android:
Привет, Грег,
Механизм Pico распознает тег с алфавитом XSAMPA.
Нет простых правил для получения определенного произношения от ортотерапии, но вы можете использовать интуитивные варианты написания, проб и ошибок. Капитализация и дефис будут представлять больше проблем, чем их решение. Использование разных описаний и введение дополнительных границ слов (пробелов) могут работать.
Тэг акцента и восклицательный знак не изменят результат синтеза. Вместо этого используйте, и команды.
Некоторые примеры правильного синтаксиса для указания произношения с использованием тега phoneme 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 Если я скомпилирую пару десятков примеров, я "Опубликуйте их на этой странице в Википедии.
Ответ 2
Один ответ для всех трех вопросов: посмотрите спецификации SSML: http://www.w3.org/TR/speech-synthesis/
Например, чтобы указать акцент, вы используете элемент выделения, например.
<?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>