我为学生在MS PowerPoint 2013应用程序中成功添加了文本到语音合成。该应用程序通过使用SSML / XML代码来改变音高,给人一种在成人语音和儿童语音之间切换的印象。这在使用Microsoft Anna语音的Windows 7上运行良好。
但是,随着Windows 10变得越来越普遍,我需要PowerPoint才能在Windows 10中正常运行。虽然应用程序将运行并使用默认的Microsoft David Desktop语音,但在使用David告知不同的语音正在讲话时,音调的变化是不够的。对于这个应用来说,这是一个很大的问题,因为用户需要采取不同的行动,具体取决于发言权。
为了让演讲工作,PowerPoint VBA使用对Microsoft Excel 15.0对象库的引用,然后是以下代码,其中SayWhat是要说高或低音调的XML文本:
Excel.Application.Speech.Speak Text:="<?xml version='1.0'?> <speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'>" & SayWhat & "</speak>", SpeakAsync:=Async, SpeakXML:=True
SayWhat变量将以
开头<prosody pitch = 'high'>
以
结束</prosody>
表示儿童的声音并以
开头<prosody rate = '-15%'><prosody pitch = 'low'>
以
结束</prosody></prosody>
成年人的声音。
在Windows 10上,Microsoft David Desktop是TTS设置中的默认语音。
我现在要做的是,为成人使用Windows 10 David语音,为孩子使用Windows 10 Zira语音。但是,当我使用下面的代码时,它只能用David的声音来表达,而不是Zira的声音。
Excel.Application.Speech.Speak Text:="<?xml version='1.0'?> <speak version='1.1' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'>" & "<voice name='MicrosoftZiraDesktop-English(UnitedStates)'>I am Zira.</voice><voice name='MicrosoftDavidDesktop-English(UnitedStates)'>I am David.</voice>" & "</speak>", SpeakAsync:=Async, SpeakXML:=True
这不起作用。这也不是:
Excel.Application.Speech.Speak Text:="<?xml version='1.0'?> <speak version='1.1' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'>" & "<voice name='Zira'>I am Zira.</voice><voice name='David'>I am David.</voice>" & "</speak>", SpeakAsync:=Async, SpeakXML:=True
我尝试使用语音字符串也没有任何变化。
尽管我在SSML / XML中找到的在线文档都表明我的元素语法是正确的,但我无法切换声音。
任何人都可以识别出能够真正改变声音的正确SSML / XML代码。
(注意:如果我将默认语音更改为Zira而不是David,则上述代码将使用Zira的语音而不是David的语音,并且不会切换到David。)