Android TTS 是不是支持语音合成标记语言?
Posted
技术标签:
【中文标题】Android TTS 是不是支持语音合成标记语言?【英文标题】:Does Android TTS support Speech Synthesis Markup Language?Android TTS 是否支持语音合成标记语言? 【发布时间】:2011-04-01 07:47:50 【问题描述】:将以下 SSML (Speech Synthesis Markup Language) 文档传递给 com.svox.pico TextToSpeech 引擎会读取 XML 正文,但无法从音素元素或强调元素进行控制。这个结果(没有明显的 SSML 控制)在运行 android 2.2 的 Nexus One 以及运行 SDK 级别 8 的 AVD 的模拟器上是相同的。
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\">" +
"tomato " +
"<phoneme alphabet=\"ipa\" ph=\"t&#x259;mei&#x325;&#x27E;ou&#x325;\"> tomato </phoneme> " +
"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 TTS 引擎支持任何 SSML 元素?
【问题讨论】:
【参考方案1】:我一直在尝试使用 SSML,似乎 TTS 引擎使用根 <speak>
元素自动包装其输入,因此如果您将其省略,那么它可以正常工作并且您不会收到解析器错误。
例子:
String text = "Testing <phoneme alphabet=\"xsampa\" ph=\""k.t@`\"/>.";
mTts.speak(text, TextToSpeech.QUEUE_ADD, null);
【讨论】:
【参考方案2】:答案似乎是“有点”。尚不支持所有 SSML 标签,但<phoneme>
标签使用的一些测试示例位于https://android.googlesource.com/platform/external/svox/+/89292811b7fe82e5c14fa13942779763627e26db
虽然测试示例会产生所需的语音输出,但它们也会在 logcat 中产生 XML 解析器错误消息。我已经在 Android 问题跟踪器(问题 11010)中打开了关于这些看似不正确的错误消息的问题。
【讨论】:
【参考方案3】:SDK 级别 23 的 android.speech.tts
似乎支持 SSML 的子集。语音文本可以包裹在<speak>
标签中,<say-as>
被观察到,而<break>
不是。没有关于 SSML 支持的文档。
【讨论】:
以上是关于Android TTS 是不是支持语音合成标记语言?的主要内容,如果未能解决你的问题,请参考以下文章
Android TextToSpeech TTS中文文本转语音(语音合成)
Android TextToSpeech TTS中文文本转语音(语音合成)