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

时间:2011-07-03 01:17:10

标签: windows vbscript text-to-speech sapi

我正在尝试编写一个简单的脚本,通过Windows 7文本到语音引擎(具有体面的Anna语音)运行一些txt文件并生成wav文件。然而,wav文件听起来并不像我直接输出到扬声器那样好。我已经在两个完全不同的Windows 7系统上尝试了这个。有什么方法可以解决这个问题吗?

脚本:

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, ..."

2 个答案:

答案 0 :(得分:2)

我不得不承认,直到几天前我才想知道同样的事情。这是解决方案,但第一行的数字“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

答案 1 :(得分:2)

SapiFileType 在此处定义:http://msdn.microsoft.com/en-us/library/ms720595%28v=vs.85%29.aspx

Enum 18 = 16kHz 16Bit Mono