You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VBScript中使用SAPI实现在句中调整语音音调?

问题:VBS结合SAPI重现《Daisy Bell》时,如何实现句内流畅变调?

我尝试用VBS结合SAPI重现《Daisy Bell》,但目前按音调拆分歌词的写法会导致演唱衔接生硬,代码如下:

yellow.Rate = 6
yellow.Speak "<pitch middle = '-10'/> Give."
yellow.Speak "<pitch middle = '-8'/> Me."
yellow.Speak "<pitch middle = '-5'/> Your."

有没有办法不拆分歌词,直接在句中调整音调,让演唱更流畅?

我试过以下两种写法,虽然歌词衔接变流畅了,但音调调整完全不起作用:

第一种写法:

yellow.Speak "<pitch middle = '-10'> Give
           <pitch middle = '-8'> Me
            <pitch middle = '-5'> Your
            </pitch>
           </pitch>
          </pitch>."

第二种写法:

yellow.Speak "<pitch middle = '-10'/> Give, <pitch middle = '-8'/> Me, <pitch middle = '-5'/> Your."

解决方法

要实现句内流畅变调,核心是用对SAPI支持的**SSML(语音合成标记语言)**语法,并启用SSML解析模式,具体操作如下:

1. 正确的SSML格式代码

Set yellow = CreateObject("SAPI.SpVoice")
yellow.Rate = 6
' 调用Speak时指定SSML解析模式(16 = SVSFIsXML),可加1实现异步播放,组合为17
yellow.Speak "<speak>" &_
             "<prosody pitch='-10%'>Give</prosody> " &_
             "<prosody pitch='-8%'>Me</prosody> " &_
             "<prosody pitch='-5%'>Your</prosody>." &_
             "</speak>", 17

2. 关键要点

  • 用<prosody>替代<pitch>:SAPI对SSML标准的<prosody>标签支持更稳定,pitch属性可用百分比(如-10%)或预设值(x-low、low等)调整音调。
  • 必须加<speak>根标签:这是SSML的强制结构,没有它SAPI会把标记当成纯文本处理。
  • 指定解析模式:Speak方法的第二个参数必须传入16(常量SVSFIsXML),告诉SAPI要解析SSML内容;如果需要后台播放,再加1(SVSFlagsAsync)即可。
  • 单次调用Speak:把所有带标记的歌词放在同一个Speak调用里,避免拆分导致的衔接生硬。

3. 你的写法失效原因

  • 第一种嵌套<pitch>的写法不符合SSML规范,SAPI无法解析嵌套的音调标记,直接忽略了变调指令。
  • 第二种写法既没有<speak>根标签,也没指定SSML解析模式,SAPI把<pitch>标签当成普通文本朗读,自然不会生效。

内容的提问来源于stack exchange,提问作者TroubledSeas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:13:11