总的来说,我对Android的默认文本到语音引擎(即com.svox.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
以下是我的问题。
的
的
顺便说一下,这就是TTS引擎写入logcat的内容:
V / TtsService(294):TTS处理:CHAH chah LOCKah[UPDATE]
我尝试将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是否支持语音合成标记语言here的问题。
答案 0 :(得分:7)
JW在tts-for-android小组回答了我的问题:
嗨格雷格,
Pico引擎使用XSAMPA字母表识别标签。
从正字法中导出某个发音没有简单的规则,但你可以使用直观的拼写和反复试验。大写和连字符将引入比解决它们更多的问题。使用不同的拼写并引入额外的单词边界(空格)可以起作用。
强调标记和感叹号不会改变合成结果。而是使用,和命令。
使用SSML音素标签指定发音的正确语法的一些示例在tests of TextToSpeech中。
即使使用这些简单的测试SSML文档,也会向logcat发布有关SSML文档格式不正确的警告消息。所以我向Android issue tracker打开了一个关于这些看似不正确的logcat消息的问题。
为SVOX pico指定x-SAMPA序列的语法是
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 :(得分:1)
所有3个问题的一个答案:查看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>