VBA - 将 SAPI 语音保存为 GIVEN 文件类型?
VBA - Save SAPI speech to a GIVEN file type?
我的任务
可以在 Office 应用程序中使用语音。我的目标是将 MS SAPI 语音保存为给定的文件类型。 AFAIK 我的代码示例保存到 WAV 文件。
问题
我不知道,是否可以只定义想要的文件类型扩展名,或者是否有必要做一些进一步的设置。
我没有使用 VBA 找到合适的解决方案。
问题
是否有代码示例如何精确定义所需的文件类型,例如MP3,使用必要的设置 (AudioStream) 将给定文本保存到此文件类型?
代码
在此代码示例中,我将输出文件直接命名为 WAV,完全不确定这是否是 WAV 文件。
我使用了后期绑定并且也包含了对早期绑定的评论。
Private Sub Speech2WAV()
' Purpose: save text Voice object to file
' Idea: cf. .Net Article with some adaptions http://www.codeguru.com/vb/gen/vb_misc/samples/article.php/c13893/Text-to-Speech-Using-Windows-SAPI.htm
' Declare variables
Dim s As String
s = "Could you give me a code example to save this text to a defined file type?"
'' ----------------------------------------------
'' Early Binding - reference do MS Speech Object Lib (SAPI.dll) needed
'' ----------------------------------------------
' Dim oVoice As New SpeechLib.SpVoice
' Dim cpFileStream As New SpeechLib.SpFileStream
'' ----------------------------------------------
' ----------------------------------------------
' Late Binding
' ----------------------------------------------
Dim oVoice As Object
Dim cpFileStream As Object
Set oVoice = CreateObject("SAPI.SpVoice")
Set cpFileStream = CreateObject("SAPI.SpFileStream")
' ----------------------------------------------
10 cpFileStream.Open ThisWorkbook.Path & "\test.wav", _
SpeechLib.SpeechStreamFileMode.SSFMCreateForWrite, False
20 Set oVoice.AudioOutputStream = cpFileStream
30 Set oVoice.Voice = oVoice.GetVoices.Item(0)
40 oVoice.Volume = 100
50 oVoice.Speak s, _
SpeechLib.SpeechVoiceSpeakFlags.SVSFDefault
55 oVoice.Rate = 1 ' speed
56 oVoice.Volume = 100 ' volume
60 Set oVoice = Nothing
70 cpFileStream.Close
80 Set cpFileStream = Nothing
Exit Sub
OOPS: ' Error Handler
MsgBox "ERL=" & Erl & "|ErrNo=" & Err.Number & "|" & Err.Description, vbExclamation, "Error in Speec2WAV"
End Sub
备注
感谢@ashleedawg 我可以推荐以下 MS 演讲链接 API:
sapi 只生成 wav 文件。
使用ffmpeg转换成其他格式...http://ffmpeg.org
vba 中的用法示例 ... use ffmpeg in vba to change video format
我的任务
可以在 Office 应用程序中使用语音。我的目标是将 MS SAPI 语音保存为给定的文件类型。 AFAIK 我的代码示例保存到 WAV 文件。
问题
我不知道,是否可以只定义想要的文件类型扩展名,或者是否有必要做一些进一步的设置。 我没有使用 VBA 找到合适的解决方案。
问题 是否有代码示例如何精确定义所需的文件类型,例如MP3,使用必要的设置 (AudioStream) 将给定文本保存到此文件类型?
代码
在此代码示例中,我将输出文件直接命名为 WAV,完全不确定这是否是 WAV 文件。
我使用了后期绑定并且也包含了对早期绑定的评论。
Private Sub Speech2WAV()
' Purpose: save text Voice object to file
' Idea: cf. .Net Article with some adaptions http://www.codeguru.com/vb/gen/vb_misc/samples/article.php/c13893/Text-to-Speech-Using-Windows-SAPI.htm
' Declare variables
Dim s As String
s = "Could you give me a code example to save this text to a defined file type?"
'' ----------------------------------------------
'' Early Binding - reference do MS Speech Object Lib (SAPI.dll) needed
'' ----------------------------------------------
' Dim oVoice As New SpeechLib.SpVoice
' Dim cpFileStream As New SpeechLib.SpFileStream
'' ----------------------------------------------
' ----------------------------------------------
' Late Binding
' ----------------------------------------------
Dim oVoice As Object
Dim cpFileStream As Object
Set oVoice = CreateObject("SAPI.SpVoice")
Set cpFileStream = CreateObject("SAPI.SpFileStream")
' ----------------------------------------------
10 cpFileStream.Open ThisWorkbook.Path & "\test.wav", _
SpeechLib.SpeechStreamFileMode.SSFMCreateForWrite, False
20 Set oVoice.AudioOutputStream = cpFileStream
30 Set oVoice.Voice = oVoice.GetVoices.Item(0)
40 oVoice.Volume = 100
50 oVoice.Speak s, _
SpeechLib.SpeechVoiceSpeakFlags.SVSFDefault
55 oVoice.Rate = 1 ' speed
56 oVoice.Volume = 100 ' volume
60 Set oVoice = Nothing
70 cpFileStream.Close
80 Set cpFileStream = Nothing
Exit Sub
OOPS: ' Error Handler
MsgBox "ERL=" & Erl & "|ErrNo=" & Err.Number & "|" & Err.Description, vbExclamation, "Error in Speec2WAV"
End Sub
备注
感谢@ashleedawg
sapi 只生成 wav 文件。
使用ffmpeg转换成其他格式...http://ffmpeg.org
vba 中的用法示例 ... use ffmpeg in vba to change video format