Windows 使用SAPI.SpVoice输出到WAV文件时,结果听起来与直接输出到扬声器时不同

Windows 使用SAPI.SpVoice输出到WAV文件时,结果听起来与直接输出到扬声器时不同,windows,vbscript,text-to-speech,sapi,Windows,Vbscript,Text To Speech,Sapi,我正在尝试编写一个简单的脚本,通过Windows7文本到语音引擎运行一些txt文件(该引擎具有体面的Anna voice)并生成wav文件。然而,wav文件听起来不像我直接将其输出到扬声器时那么好。我已经在两个完全不同的Windows7系统上试过了。有办法补救吗 脚本: set x = createobject("SAPI.SpVoice") ' Uncomment following lines to output to file 'set ofs = createobject("SAPI.S

我正在尝试编写一个简单的脚本,通过Windows7文本到语音引擎运行一些txt文件(该引擎具有体面的Anna voice)并生成wav文件。然而,wav文件听起来不像我直接将其输出到扬声器时那么好。我已经在两个完全不同的Windows7系统上试过了。有办法补救吗

脚本:

set x = createobject("SAPI.SpVoice") ' Uncomment following lines to output to file 'set ofs = createobject("SAPI.SpFileStream") 'ofs.Open "msg.wav", 3, vbFalse 'set x.AudioOutputStream = ofs x.Speak "In the fall of 2003, ..." 设置x=createobject(“SAPI.SpVoice”) '取消对以下行的注释以输出到文件 'SETOFS=createobject(“SAPI.SpFileStream”) 'ofs.Open“msg.wav”,3,vbFalse '设置x.AudioOutputStream=ofs x、 说“2003年秋天,…”
我必须承认,直到几天前我还在想同样的事情。这是解决方案,但是第一行上的数字“18”可能是特定于语音的。很长一段时间以来,我一直在尝试将高质量的版本放入wav文件中,因此我最终遍历了每个数字(0-64),并听取了所有的示例,直到找到正确的一个

将下面的代码粘贴到记事本中,另存为'SapiSomething.vbs',然后运行,希望这是您正在寻找的高质量输出。对我来说,文件输出中的音质最终与语音直接发送到扬声器时的音质相同

Const SapiFileType=18 ' Magic number, possibly voice specific (0 to 64)

strText=Trim(InputBox("What do you want me to say?","Listen to Sapi.SpFileStream.Format.Type Quality",""))
If NOT len(strText)>0 Then WScript.Quit
With CreateObject("Scripting.FileSystemObject")
 strFile=.BuildPath(.GetParentFolderName(WScript.ScriptFullName),"Sapi.SpFileStream.Format.Type_"&SapiFileType&".wav")
 If .FileExists(strFile) Then .DeleteFile strFile
End With
With CreateObject("Sapi.SpVoice")
 Set ss=CreateObject("Sapi.SpFileStream")
 ss.Format.Type=SapiFileType
 ss.Open strFile,3,False
 Set .AudioOutputStream=ss
 .Speak strText,8
 .waituntildone(-1)
 ss.Close
 Set ss=Nothing
End With
With CreateObject("WMPlayer.OCX"):.settings.autoStart=True:.settings.volume=100:.URL=strFile:Do until .playState=1:Wscript.Sleep 200:Loop:End With

SapiFileType定义如下:


Enum18=16kHz 16位单声道

谢谢!这非常有用!