При использовании SAPI.SpVoice для вывода в файл WAV результат звучит иначе, чем при выводе напрямую на динамики - PullRequest
3 голосов
/ 03 июля 2011

Я пытаюсь написать простой сценарий для запуска некоторых текстовых файлов через механизм преобразования текста в речь Windows 7 (обладающий приличным голосом Анны) и создания файлов 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 ]

2 голосов
/ 29 июля 2013

SapiFileType определяется здесь: http://msdn.microsoft.com/en-us/library/ms720595%28v=vs.85%29.aspx

Enum 18 = 16 кГц 16-битный моно

2 голосов
/ 28 мая 2012

Должен признаться, мне было интересно то же самое до нескольких дней назад. Вот решение, однако число «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
...