При использовании SAPI.SpVoice для вывода в файл WAV результат звучит иначе, чем при прямом выводе на динамики.

Я пытаюсь написать простой скрипт для запуска некоторых текстовых файлов через механизм преобразования текста в речь 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, ..."

person Yang    schedule 03.07.2011    source источник


Ответы (2)


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

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

person James    schedule 29.07.2013

Должен признаться, еще несколько дней назад я задавался тем же вопросом. Вот решение, однако число «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
person Brandon    schedule 28.05.2012
comment
Спасибо! Это было очень полезно! - person mnutsch; 25.02.2014