1

我成功地在我的学生的 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。)

4

0 回答 0