Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为Android TTS引擎指定发音的最佳实践?_Android_Text To Speech_Ssml - Fatal编程技术网

为Android TTS引擎指定发音的最佳实践?

为Android TTS引擎指定发音的最佳实践?,android,text-to-speech,ssml,Android,Text To Speech,Ssml,总的来说,Android的默认文本到语音引擎(即com.svox.pico)给我留下了深刻的印象。正如所料,它会发音错误(我也是),因此偶尔需要一些发音指导。因此,我想知道如何通过语音拼写出那些pico TTS引擎发音错误的单词的最佳实践 例如,查查拉卡鸟的正确发音是查查拉卡。以下是TTS引擎产生的结果: mTts.speak("Chachalaca", TextToSpeech.QUEUE_ADD, null); // output: chuh-KAL-uh-KUH mTts.speak("C

总的来说,Android的默认文本到语音引擎(即com.svox.pico)给我留下了深刻的印象。正如所料,它会发音错误(我也是),因此偶尔需要一些发音指导。因此,我想知道如何通过语音拼写出那些pico TTS引擎发音错误的单词的最佳实践

例如,查查拉卡鸟的正确发音是查查拉卡。以下是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/TTS服务(294):TTS处理:CHAH CHAH LOCKah
V/TtsService(294):TtsService.setLanguage(英语,美国,)
I/SVOX微微引擎(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);
String text=“”+
"" +
“那是一辆大轿车!”+
“那是一辆大轿车!”+
“那是一辆大轿车!”+
“那是一个巨大的银行账户!”+
“那是一个巨大的银行账户!”+
“那是一个巨大的银行账户!”+
"";
mTts.speak(text,TextToSpeech.QUEUE\u ADD,null);
正如AndroidEve所建议的,TTS引擎只读取XML正文(即,关于大型汽车和大型银行账户的评论)。我没有意识到TTS引擎能够解析XML文档。然而,我在TTS输出中没有听到任何强调

[更新2]


我将问题简化为Android TTS是否支持语音合成标记语言。

所有3个问题的一个答案:查看SSML规范:

例如,要指定强调,请使用强调元素,例如

<?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>

那是一辆大轿车!
这是一个巨大的挑战
银行账户!

JW在小组会议上回答了我的问题:

嗨,格雷格

Pico引擎使用XSAMPA字母表识别标签

从正字法中推导出某个发音没有简单的规则,但你可以使用直观的拼写和反复试验。大写和连字符将带来比解决问题更多的问题。使用不同的拼写和引入额外的单词边界(空格)可以奏效

强调标记和感叹号不会改变合成结果。改为使用、和命令


下面是一些使用SSML音素标记指定发音的正确语法示例

即使使用这些简单的测试SSML文档,也会向logcat发布关于SSML文档格式不正确的警告消息。因此,我就这些看似不正确的logcat消息向


将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); 
String text=“.”;
mTts.speak(text,TextToSpeech.QUEUE\u ADD,null);

虽然更多的例子会很有帮助,但是如果我编译了几十个例子,我会把它们发布到维基百科的页面上。谢谢,但是我不知道如何在这个上下文中使用你的例子。根据您的建议(粗略地说),我尝试调用mTts.speak(“哈哈哈哈哈”,TextToSpeech.QUEUE_ADD,null),但输出包含一个强调标记的读数。您是说将XML文档字符串作为第一个参数传递给TextToSpeech.speak()将导致TTS引擎读取XML正文并使用解析的标记控制读取?TextToSpeech的测试链接已断开