VBA - ¿Guardar voz SAPI en un tipo de archivo DADO?
Mi tarea
Es posible usar el habla en aplicaciones de Office. Mi objetivo es guardar el discurso de MS SAPI en un tipo de archivo determinado. AFAIK mi código de ejemplo se guarda en un archivo WAV.
Problema
No sé, si es posible definir solo la extensión del tipo de archivo deseado o si es necesario realizar alguna configuración adicional. No encontré una solución adecuada usando VBA.
Pregunta ¿Hay un ejemplo de código para definir con precisión un tipo de archivo deseado, p. MP3, ¿guardar un texto dado en este tipo de archivo utilizando la configuración necesaria (AudioStream)?
Código
En este ejemplo de código, estoy nombrando el archivo de salida directamente como WAV con total incertidumbre si será un archivo WAV.
Utilicé el enlace tardío e incluí un comentario para el enlace temprano también.
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
Gracias a @ashleedawgcomentario de Puedo recomendar los siguientes enlaces a la API de MS Speech: