VBA - Salvar fala SAPI em um tipo de arquivo GIVEN?
Minha tarefa
É possível usar a fala em aplicativos do Office. Meu objetivo é salvar o discurso do MS SAPI em um determinado tipo de arquivo. AFAIK meu exemplo de código salva em um arquivo WAV.
Problema
Não sei se é possível definir apenas a extensão do tipo de arquivo desejado ou se é necessário fazer outras configurações. Não encontrei uma solução apropriada usando o VBA.
Pergunta, questão Existe um exemplo de código de como definir com precisão um tipo de arquivo desejado, por exemplo MP3, salvar um determinado texto neste tipo de arquivo usando as configurações necessárias (AudioStream)?
Código
Neste exemplo de código, estou nomeando o arquivo de saída diretamente como WAV com total incerteza se este for um arquivo WAV.
Usei a ligação tardia e incluí um comentário para a ligação antecipada também.
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
Nota
Thx to @ashleedawgcomentário de Posso recomendar os seguintes links para a API do Microsoft Speech: