ayuda en VB.NET

Iniciado por **Aincrad**, 13 Noviembre 2017, 15:05 PM

0 Miembros y 1 Visitante están viendo este tema.

**Aincrad**

hola a todos.

bueno tengo un pequeño problemilla. tengo el siguiente code:
Código (vbnet) [Seleccionar]
Const SAFT48kHz16BitStereo = 39
Const SSFMCreateForWrite = 3
Dim oFileStream, oVoice

Set oFileStream = CreateObject("SAPI.SpFileStream")
oFileStream.Format.Type = SAFT48kHz16BitStereo
oFileStream.Open "C:\Work\Sample.wav", SSFMCreateForWrite ' Aqui el directorio que quiero cambiar por un SaveFileDialog1.FileName

Set oVoice = CreateObject("SAPI.SpVoice")
Set oVoice.AudioOutputStream = oFileStream
oVoice.Speak(ben.Text, 3)

oVoice.WaitUntilDone(10000)

oFileStream.Close


y lo que quiero es cambiar ese directorio por un SaveFileDialog1.FileName
y me quedaria algo como esto:

Código (vbnet) [Seleccionar]
Const SAFT48kHz16BitStereo = 39
Const SSFMCreateForWrite = 3
SaveFileDialog1.DefaultExt = ".wav"
Dim oFileStream, oVoice


Set oFileStream = CreateObject("SAPI.SpFileStream")
oFileStream.Format.Type = SAFT48kHz16BitStereo
oFileStream.Open SaveFileDialog1.FileName, SSFMCreateForWrite

Set oVoice = CreateObject("SAPI.SpVoice")
Set oVoice.AudioOutputStream = oFileStream
oVoice.Speak "Hello world", 3

oVoice.WaitUntilDone(10000)

oFileStream.Close


no se si me explique , en pocas palabras lo que quiero es aplicar el SaveFileDialog1.FileName al primer code que puse , pero no logro hacerlo , disculpen mi ignorancia.   

gracias de antemano.  ;D




Serapis

De entrada, quiero reprenderte, por estas razones:
1º - Veo que no eres nuevo en el foro (tienes ya 175 mensajes publicados en el foro), pero el título del tema, no dice nada, los títulos de los temas DEBEN SER DESCRIPTIVOS del problema en cuestión. Decir "Ayuda..." es nada. El buscador del foro, es completamente inútil con títulos así.
2º - De hecho es probable que tu pregunta ya esté explicada en este mismo foro, más de 1 ó 5 veces. Creo que no has usado el buscador del foro...
3º - De hecho es tan genérica que puedo asegurarte que hay miles de ejemplos buscando por google "ejemplo para usar el control SaveFileDialog en VB.NET", tampoco te has tomado la molestia de buscar en la red de forma genérica con google (u otro buscador de tu elección).


Cuando se hagan preguntas en un foro, tiene uno al menos que haber investigado por su cuenta, y sólo cuando no haya logrado nada al respecto (casos de temas complejos, nuevos, o muy específicos que escapen de la generalidad), es cuando es razonable preguntar en un foro en busca de ayuda. Pero el primer punto de la ayuda, debe ser buscarla por uno mismo:
1º - En la ayuda que el propio programa-entorno contenga.
2º - En la web propia del lenguaje que uno usa (en este caso concreto Microsoft.com)
3º - En los buscadores de internet (Google it's your friend and wikipedia your cousin, my brother).
4º - En el buscador del foro.
5º - Si todo lo anterior fracasa, es cuando procede hacer una consulta en el foro, pero además bien formulada y con un título claramente descriptivo (lo de breve si es posible, y en el sitio correcto, en eso aciertas).


Así que no voy a ayudarte con el tema, y preferiría que tampoco lo hiciera ningún compañero...

**Aincrad**

#2
bueno , acepto todo lo que mes has dicho como critica constructiva . de verdad admito que fuy un poco flojo acerca de el titulo.

y acerca del code ya lo he logrado , bueno ha quedado asi:

Código (vbnet) [Seleccionar]
Const SAFT48kHz16BitStereo = 39
       Const SSFMCreateForWrite = 3
       Dim oFileStream, oVoice
       Dim saveFileDialog2 As New SaveFileDialog()
       saveFileDialog2.Filter = "WAV Sound|*.wav"
       saveFileDialog2.Title = "Save an sound File"
       saveFileDialog2.ShowDialog()
       Try
               oFileStream = CreateObject("SAPI.SpFileStream")
               oFileStream.Format.Type = SAFT48kHz16BitStereo
               oFileStream.Open(saveFileDialog2.FileName, SSFMCreateForWrite)

               oVoice = CreateObject("SAPI.SpVoice")
               oVoice.AudioOutputStream = oFileStream
               oVoice.Speak(ben.Text, 3)

               oVoice.WaitUntilDone(10000)

               oFileStream.Close()
       Catch ex As Exception
           MsgBox(ex.Message)
       End Try




Eleкtro

#3
Aparte de todo lo que te ha dicho el compañero @NEBIRE, cosa en la que concuerdo completamente...

Cita de: **Aincrad** en 13 Noviembre 2017, 17:05 PM
Código (vbnet) [Seleccionar]
CreateObject("SAPI.SpFileStream")

...No existe una necesidad real de recurrir a código no administrado, y aparte lo estás haciendo al estilo obsoleto, inseguro y limitado de VB6/VBS, para eso sinceramente no conviene usar .NET, por que no le estás sacando ningún beneficio real. Deberías evitar copiar el primer código que te encuentres en Internet para VB6 o VBS, e intentar buscar soluciones más actualizadas que hagan uso de los miembros equivalentes para .NET Framework ( System.Type.GetTypeFromProgID() + System.Activator.CreateInstance() + Implementación de interfaces nativas ), no es tan dificil investigar bien... en general debes evitar usar en lo máximo posible los miembros del espacio de nombres Microsoft.VisualBasic, por que el 80% aprox del contenido son miembros que están ahí simplemente por compatibilidad en temas de migración de VB6 a VB.NET, pero cuyo código fuente de todos esos miembros, aunque sea una implementación en código .NET apesta, es un código muy poco óptimo y miembros muy limitados en comparación (puedes observar las diferencias analizando la referencia online del código fuente de .NET Framework).

Si quieres hacer de forma correcta, segura y sofisticada lo que pretendes hacer, entonces usa la implementación administrada de Microsoft Speech API (SAPI) para .NET. Aquí tienes un ejemplo para sintetizar texto y guardarlo en un archivo WAV:


PD: La documentación de MSDN es tu mejor amiga... cuando no sepas algo, busca ahí.

Saludos.