RECONOCIMIENTO DE VOZ

03- Jugando con el Reconocimiento de Voz en Visual
Basic (VB.NET)



La resolución del monitor original: 1600 X 900 px.
deberá ajustarse el código para monitores con otra resolucion.

Codigo:
  
Form1

Imports System.Speech.Recognition
Imports System.Speech.Synthesis
Imports System.Runtime.InteropServices
Public Class Form1
    Dim REC As New SpeechRecognitionEngine
    Dim SINT As New SpeechSynthesizer
    Dim VELOCIDAD As Integer = 500
    Private Const APPCOMMAND_VOLUME_MUTE As Integer = &H80000
    Private Const APPCOMMAND_VOLUME_UP As Integer = &HA0000
    Private Const APPCOMMAND_VOLUME_DOWN As Integer = &H90000
    Private Const WM_APPCOMMAND As Integer = &H319
    <DllImport("user32.dll")>
    Public Shared Function SendMessageW(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        IMAGEN.Image = System.Drawing.Bitmap.FromFile(Application.StartupPath & "\Resources\IMAGENES\4D.gif")
        OBSTACULO.Visible = False

        Dim VOCABULARIO As New GrammarBuilder
        VOCABULARIO.Append(New Choices("arriba", "abajo", "derecha", "izquierda", "rapido", "despacio", "para", "vuelve", "dragon", "paisaje", "callate", "ruido"))

        REC.LoadGrammar(New Grammar(VOCABULARIO))
        REC.SetInputToDefaultAudioDevice()
        REC.RecognizeAsync(RecognizeMode.Multiple)
        AddHandler REC.SpeechRecognized, AddressOf RECONOCE
        AddHandler REC.SpeechRecognitionRejected, AddressOf NORECONOCE
        AddHandler REC.SpeechDetected, AddressOf DETECTA

        RELOJABAJO.Interval = VELOCIDAD
        RELOJADELANTE.Interval = VELOCIDAD
        RELOJARRIBA.Interval = VELOCIDAD
        RELOJATRAS.Interval = VELOCIDAD
      
        My.Computer.Audio.Play(Application.StartupPath & "\Resources\SONIDOS\HELICOPTERO.WAV", AudioPlayMode.BackgroundLoop)

    End Sub
    Public Sub Speak(ByVal s As String)

        Dim voices As System.Collections.ObjectModel.ReadOnlyCollection(
        Of System.Speech.Synthesis.InstalledVoice) =
        SINT.GetInstalledVoices()
        SINT.SelectVoice(voices(0).VoiceInfo.Name)
        SINT.Speak(s)

    End Sub
    Public Sub NORECONOCE()
        SEÑAL.BackColor = Color.Red
    End Sub
    Public Sub DETECTA()
        SEÑAL.BackColor = Color.Yellow
    End Sub
    Public Sub RECONOCE(ByVal sender As Object, ByVal e As SpeechRecognizedEventArgs)
        SEÑAL.BackColor = Color.Green
        Dim PALABRA As RecognitionResult
        Dim palabras As String
        PALABRA = e.Result
        palabras = PALABRA.Text

        Select palabras
            Case "arriba"
                ARRIBA()
            Case "abajo"
                ABAJO()
            Case "derecha"
                ADELANTE()
            Case "izquierda"
                ATRAS()
            Case "para"
                PARA()
            Case "rapido"
                RAPIDO()
            Case "despacio"
                DESPACIO()
            Case "vuelve"
                VUELVE()
            Case "dragon"
                DRAGON()
            Case "paisaje"
                PAISAJE()
            Case "callate"
                SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_MUTE))
            Case "ruido"
                SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_UP))
        End Select
       

    End Sub
    Public Sub ARRIBA()
        RELOJARRIBA.Enabled = True
        RELOJABAJO.Enabled = False
        RELOJATRAS.Enabled = False
        RELOJADELANTE.Enabled = False

    End Sub
    Public Sub ABAJO()
        RELOJARRIBA.Enabled = False
        RELOJABAJO.Enabled = True
        RELOJATRAS.Enabled = False
        RELOJADELANTE.Enabled = False

    End Sub
    Public Sub ATRAS()
        IMAGEN.Image = System.Drawing.Bitmap.FromFile(Application.StartupPath & "\Resources\IMAGENES\4I.gif")
        RELOJARRIBA.Enabled = False
        RELOJABAJO.Enabled = False
        RELOJATRAS.Enabled = True
        RELOJADELANTE.Enabled = False

    End Sub
    Public Sub ADELANTE()
        IMAGEN.Image = System.Drawing.Bitmap.FromFile(Application.StartupPath & "\Resources\IMAGENES\4D.gif")
        RELOJARRIBA.Enabled = False
        RELOJABAJO.Enabled = False
        RELOJATRAS.Enabled = False
        RELOJADELANTE.Enabled = True

    End Sub
    Public Sub PARA()
        RELOJARRIBA.Enabled = False
        RELOJABAJO.Enabled = False
        RELOJATRAS.Enabled = False
        RELOJADELANTE.Enabled = False
        VELOCIDAD = 500
        RELOJABAJO.Interval = VELOCIDAD
        RELOJADELANTE.Interval = VELOCIDAD
        RELOJARRIBA.Interval = VELOCIDAD
        RELOJATRAS.Interval = VELOCIDAD
    End Sub
    Public Sub RAPIDO()
        VELOCIDAD = VELOCIDAD / 2
        RELOJABAJO.Interval = VELOCIDAD
        RELOJADELANTE.Interval = VELOCIDAD
        RELOJARRIBA.Interval = VELOCIDAD
        RELOJATRAS.Interval = VELOCIDAD

    End Sub
    Public Sub DESPACIO()
        VELOCIDAD = VELOCIDAD * 2
        RELOJABAJO.Interval = VELOCIDAD
        RELOJADELANTE.Interval = VELOCIDAD
        RELOJARRIBA.Interval = VELOCIDAD
        RELOJATRAS.Interval = VELOCIDAD

    End Sub
    Public Sub VUELVE()
        PARA()
        IMAGEN.Location = New Point(700, 400)
        VELOCIDAD = 500
        RELOJABAJO.Interval = VELOCIDAD
        RELOJADELANTE.Interval = VELOCIDAD
        RELOJARRIBA.Interval = VELOCIDAD
        RELOJATRAS.Interval = VELOCIDAD

    End Sub
    Public Sub DRAGON()
        Me.BackgroundImage = Nothing
        OBSTACULO.Image = System.Drawing.Bitmap.FromFile(Application.StartupPath & "\Resources\IMAGENES\OBSTACULO.gif")
        OBSTACULO.Location = New Point(1300, -100)
        OBSTACULO.Visible = True
        RELOJOBSTACULO.Enabled = True
        RELOJOBSTACULO.Interval = 1000
        VUELVE()
    End Sub
    Public Sub PAISAJE()
        Me.BackgroundImage = System.Drawing.Bitmap.FromFile(Application.StartupPath & "\Resources\IMAGENES\PAISAJE.JPG")
        OBSTACULO.Visible = False
        RELOJOBSTACULO.Enabled = False
        VUELVE()
    End Sub
    Private Sub RELOJARRIBA_Tick(sender As Object, e As EventArgs) Handles RELOJARRIBA.Tick
        IMAGEN.Location = New Point(IMAGEN.Location.X, IMAGEN.Location.Y - 50)
       
    End Sub

    Private Sub RELOJABAJO_Tick(sender As Object, e As EventArgs) Handles RELOJABAJO.Tick
        IMAGEN.Location = New Point(IMAGEN.Location.X, IMAGEN.Location.Y + 50)
      
    End Sub

    Private Sub RELOJATRAS_Tick(sender As Object, e As EventArgs) Handles RELOJATRAS.Tick
        IMAGEN.Location = New Point(IMAGEN.Location.X - 50, IMAGEN.Location.Y)
    End Sub

    Private Sub RELOJADELANTE_Tick(sender As Object, e As EventArgs) Handles RELOJADELANTE.Tick
        IMAGEN.Location = New Point(IMAGEN.Location.X + 50, IMAGEN.Location.Y)
    End Sub
  

    Private Sub RELOJOBSTACULO_Tick_1(sender As Object, e As EventArgs) Handles RELOJOBSTACULO.Tick
        Dim generator As New Random
        Dim randomValue As Integer
        randomValue = generator.Next(-50, 1500)

        If OBSTACULO.Location.Y < 0 Then
            My.Computer.Audio.Play(Application.StartupPath & "\Resources\SONIDOS\HELICOPTERO.WAV", AudioPlayMode.BackgroundLoop)

            OBSTACULO.Image = System.Drawing.Bitmap.FromFile(Application.StartupPath & "\Resources\IMAGENES\OBSTACULO.gif")
        End If
        If OBSTACULO.Location.Y > 900 Then
            My.Computer.Audio.Play(Application.StartupPath & "\Resources\SONIDOS\HELICOPTERO.WAV", AudioPlayMode.BackgroundLoop)

            OBSTACULO.Location = New Point(randomValue, -90)
        Else
            My.Computer.Audio.Play(Application.StartupPath & "\Resources\SONIDOS\HELICOPTERO.WAV", AudioPlayMode.BackgroundLoop)

            OBSTACULO.Location = New Point(OBSTACULO.Location.X, OBSTACULO.Location.Y + 50)
        End If
        If Math.Abs(IMAGEN.Location.X - OBSTACULO.Location.X) < 200 And Math.Abs(IMAGEN.Location.Y - OBSTACULO.Location.Y) < 100 Then
            OBSTACULO.Image = System.Drawing.Bitmap.FromFile(Application.StartupPath & "\Resources\IMAGENES\EXPLOSION.gif")
            My.Computer.Audio.Play(Application.StartupPath & "\Resources\SONIDOS\EXPLOSION.WAV")

        End If
    End Sub
  
End Class




02-Control del Cursor por Voz



 
 

Codigo:

Form1

Imports System.Speech.Recognition
Imports System.Runtime.InteropServices

Public Class Form1
    <DllImport("user32.dll", CharSet:=CharSet.Auto,

CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Sub mouse_event(dwFlags As

Integer, dx As Integer, dy As Integer, cButtons As
Integer, dwExtraInfo As Integer)
    End Sub
   

    Private Const MOUSEEVENTF_LEFTDOWN As
Integer = &H2
    Private Const MOUSEEVENTF_LEFTUP As Integer =

&H4
    Private Const MOUSEEVENTF_RIGHTDOWN As

Integer = &H8
    Private Const MOUSEEVENTF_RIGHTUP As Integer

= &H10

    Dim PUNTOX As Integer
    Dim PUNTOY As Integer
    Dim REC As New SpeechRecognitionEngine
    Dim PALABRA As String
    Dim VELOCIDAD As Integer = 10
  
    Public Sub CLICKIZDO()
        mouse_event(MOUSEEVENTF_LEFTDOWN,
PUNTOX, PUNTOY, 0, 0)
        mouse_event(MOUSEEVENTF_LEFTUP, PUNTOX,
PUNTOY, 0, 0)
    End Sub
    Public Sub CLICKDCHO()
        mouse_event(MOUSEEVENTF_RIGHTDOWN,

PUNTOX, PUNTOY, 0, 0)
        mouse_event(MOUSEEVENTF_RIGHTUP,

PUNTOX, PUNTOY, 0, 0)
    End Sub
  
    Private Sub MOVERMOUSE()
        Cursor = New Cursor(Cursor.Current.Handle)
        Cursor.Position = New Point(PUNTOX, PUNTOY)
    End Sub
    Private Sub Form1_Load(sender As Object, e As

EventArgs) Handles MyBase.Load
        Dim VOCABULARIO As New GrammarBuilder
        VOCABULARIO.Append(New Choices("arriba",

"para", "abajo", "izquierda", "derecha", "intro",
"doble", "rapido", "lento", "normal"))
        REC.LoadGrammar(New Grammar

(VOCABULARIO))
        REC.SetInputToDefaultAudioDevice()
        REC.RecognizeAsync(RecognizeMode.Multiple)
        AddHandler REC.SpeechRecognized, AddressOf

RECONOCE
        Label2.Text = VELOCIDAD
    End Sub
    Public Sub RECONOCE(ByVal sender As Object,

ByVal e As SpeechRecognizedEventArgs)
        Dim RESULTADO As RecognitionResult
        RESULTADO = e.Result
        PALABRA = RESULTADO.Text
        Label1.Text = PALABRA.ToUpper
       
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As
EventArgs) Handles Timer1.Tick
        Select Case PALABRA
            Case "para"
                Timer1.Enabled = False

            Case "arriba"
                PUNTOX = Cursor.Position.X
                PUNTOY = Cursor.Position.Y - VELOCIDAD
                MOVERMOUSE()

            Case "abajo"
                PUNTOX = Cursor.Position.X
                PUNTOY = Cursor.Position.Y + VELOCIDAD
                MOVERMOUSE()

            Case "izquierda"
                PUNTOX = Cursor.Position.X - VELOCIDAD
                PUNTOY = Cursor.Position.Y
                MOVERMOUSE()

            Case "derecha"
                PUNTOX = Cursor.Position.X + VELOCIDAD
                PUNTOY = Cursor.Position.Y
                MOVERMOUSE()

            Case "intro"
                CLICKIZDO()
                Timer1.Enabled = False

            Case "doble"
                CLICKIZDO()
                CLICKIZDO()
                Timer1.Enabled = False

            Case "rapido"
                VELOCIDAD = 50
                Label2.Text = VELOCIDAD
                Timer1.Enabled = False

            Case "lento"
                VELOCIDAD = 2
                Label2.Text = VELOCIDAD
                Timer1.Enabled = False

            Case "normal"
                VELOCIDAD = 10
                Label2.Text = VELOCIDAD
                Timer1.Enabled = False

        End Select
    End Sub

  
End Class

 
 
 
01- Reconocimiento de Voz y Texto Hablado con Visual Basic (VB.NET)
 
 
CODIGO:
Hay que importar la Referencia System.Speech:
 
Proyecto > Agregar Referencia > Ensamblados > Framework > System.Speech
 
FORM1
 
Imports System.Speech
Imports System.Speech.Recognition
Imports Microsoft.VisualBasic.FileIO
Public Class Form1
    Dim REC As New SpeechRecognitionEngine
    Dim SYNT As New Speech.Synthesis.SpeechSynthesizer
    Dim PALABRA As String
    Dim CONTADOR As Integer = 0
    Dim MIARRAY(CONTADOR) As String
    Dim DICCIONARIO As String = Application.StartupPath & "\DICCIONARIO.txt"
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
    End Sub
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
  
        Dim VOCABULARIO As New GrammarBuilder
        VOCABULARIO.Append(New Choices("entrada", "consulta", "guardar", "buscar", "hola"))
        REC.LoadGrammar(New Grammar(VOCABULARIO))
        REC.SetInputToDefaultAudioDevice()
        REC.RecognizeAsync(RecognizeMode.Multiple)
        AddHandler REC.SpeechRecognized, AddressOf RECONOCE
        AddHandler REC.SpeechRecognitionRejected, AddressOf NORECONOCE
        AddHandler REC.SpeechDetected, AddressOf DETECTA
        Timer1.Enabled = False
    End Sub
    Public Sub NORECONOCE()

    End Sub
    Public Sub DETECTA()
    End Sub
    Public Sub RECONOCE(ByVal sender As Object, ByVal e As SpeechRecognizedEventArgs)
        Dim RESULTADO As RecognitionResult
        RESULTADO = e.Result
        Dim PALABRA As String
        PALABRA = RESULTADO.Text
        Select Case PALABRA
            Case "hola"
                SYNT.Speak("nice to see you again")
            Case "entrada"
                BORRAR()
                Label3.Text = "GUARDAR"
                TextBox1.ReadOnly = False
                TextBox2.ReadOnly = False
                TextBox1.Visible = True
                TextBox2.Visible = True
            Case "consulta"
                BORRAR()
                Label2.BackColor = Color.Red
                TextBox1.Visible = True
                TextBox2.Visible = True
                TextBox1.ReadOnly = True
                TextBox2.ReadOnly = True
                ES_EN()
            Case "guardar"
                BORRAR()
                If TextBox1.Text = "" Or TextBox2.Text = "" Then
                    Beep()
                Else
                    My.Computer.FileSystem.WriteAllText(DICCIONARIO, TextBox1.Text.ToLower & vbCrLf & TextBox2.Text.ToLower & vbCrLf, True)
                    SYNT.Speak("saved")
                    Label3.Text = "ENTRADA"
                    TextBox1.Text = ""
                    TextBox2.Text = ""
                    TextBox1.ReadOnly = True
                    TextBox2.ReadOnly = True
                    TextBox1.Visible = False
                    TextBox2.Visible = False
                End If
            Case Else
                TextBox1.Text = RESULTADO.Text.ToUpper
                For I = 0 To CONTADOR - 1
                    Try
                        If MIARRAY(I) = RESULTADO.Text Then
                            TextBox2.Text = MIARRAY(I + 1).ToUpper
                            SYNT.Speak(MIARRAY(I + 1))
                            Exit For
                        End If
                    Catch ex As Exception
                        MsgBox(ex.Message)
                    End Try
                  
                Next
        End Select
    End Sub
    Public Sub BORRAR()
        Label2.BackColor = Color.Black
        Label3.BackColor = Color.Black
    End Sub
    Public Sub ES_EN()
        Dim INGLES As New GrammarBuilder
        Dim filename As String = DICCIONARIO
        Dim fields As String()
        Dim delimiter As String = ","
        Using parser As New TextFieldParser(filename)
            parser.SetDelimiters(delimiter)
            While Not parser.EndOfData
                ' Read in the fields for the current line
                fields = parser.ReadFields()
                ' Add code here to use data in fields variable.
                For I = 0 To fields.Count - 1
                    If fields(I) <> "" Then
                        ReDim Preserve MIARRAY(CONTADOR)
                        MIARRAY(CONTADOR) = fields(I)
                        CONTADOR += 1
                    End If
                Next
            End While
            Try
               
                INGLES.Append(New Choices(MIARRAY))
                REC.LoadGrammar(New Grammar(INGLES))
                SYNT.Speak("go ahead")
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
          
        End Using

    End Sub
End Class

 
 
 
Navegador Web Controlado por Voz VB.NET (Speech Recognition)
 
 
 

CODIGO:
 
 Imports System.Speech.Recognition
Imports System.Speech.Synthesis
Imports System.Runtime.InteropServices
Public Class Form1
    Dim REC As New SpeechRecognitionEngine
    Dim SYNT As New Speech.Synthesis.SpeechSynthesizer
    Dim DISTANCIA As Integer = 0
    Private Const APPCOMMAND_VOLUME_MUTE As Integer = &H80000
    Private Const APPCOMMAND_VOLUME_UP As Integer = &HA0000
    Private Const APPCOMMAND_VOLUME_DOWN As Integer = &H90000
    Private Const WM_APPCOMMAND As Integer = &H319
    <DllImport("user32.dll")>
    Public Shared Function SendMessageW(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        Dim VOCABULARIO As New GrammarBuilder
        VOCABULARIO.Append(New Choices("ampliar", "adelante", "atras", "humor", "confidencial", "pais", "vanguardia", "mundo", "periodico",
                                       "neoteo", "correo", "yutube", "tiempo", "buscador", "traductor", "television", "impara", "abece", "abajo",
                                       "arriba", "silencio", "sonido"))
        REC.LoadGrammar(New Grammar(VOCABULARIO))
        REC.SetInputToDefaultAudioDevice()
        REC.RecognizeAsync(RecognizeMode.Multiple)
        AddHandler REC.SpeechDetected, AddressOf detectado
        AddHandler REC.SpeechRecognitionRejected, AddressOf noreco
        AddHandler REC.SpeechRecognized, AddressOf reco
        SYNT.Speak("hola, ¿como estas hoy?")
       
    End Sub
  
    Public Sub detectado(ByVal sender As Object, ByVal e As SpeechDetectedEventArgs)
        SEÑAL.BackColor = Color.Yellow
    End Sub
    Public Sub noreco(ByVal sender As Object, ByVal e As SpeechRecognitionRejectedEventArgs)
        SEÑAL.BackColor = Color.Red
        SYNT.Speak("repite por favor")
    End Sub
    Public Sub reco(ByVal sender As Object, ByVal e As SpeechRecognizedEventArgs)
        Dim RESULTADO As RecognitionResult
        RESULTADO = e.Result
        Dim PALABRA As String
        PALABRA = RESULTADO.Text
        SYNT.Speak(PALABRA)

        Select Case PALABRA
            Case "confidencial"
                Dim WEB As New Uri("http://www.elconfidencial.com/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "confidencial".ToUpper
            Case "pais"
                Dim WEB As New Uri("http://elpais.com/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "pais".ToUpper
            Case "vanguardia"
                Dim WEB As New Uri("http://www.lavanguardia.com/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "vanguardia".ToUpper
            Case "abece"
                Dim WEB As New Uri("http://www.abc.es/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "abc".ToUpper
            Case "mundo"
                Dim WEB As New Uri("http://www.elmundo.es/index.html?a=bbe24238eec42426ca673d95ba6c7f7a&t=1348811181")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "mundo".ToUpper
            Case "periodico"
                Dim WEB As New Uri("http://www.elperiodico.com/es/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "periodico".ToUpper
            Case "neoteo"
                Dim WEB As New Uri("http://www.neoteo.com/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "neoteo".ToUpper
            Case "humor"
                Dim WEB As New Uri("http://www.eljueves.es/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "el jueves".ToUpper
            Case "tiempo"
                Dim WEB As New Uri("http://tiempoytemperatura.es/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "tiempo".ToUpper
            Case "buscador"
                Dim WEB As New Uri("https://www.google.es/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "buscador".ToUpper
            Case "traductor"
                Dim WEB As New Uri("http://servicios.elpais.com/traductor/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "traductor".ToUpper
            Case "television"
                Dim WEB As New Uri("http://parrilla-tv.lavanguardia.com/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "television".ToUpper
            Case "correo"
                Dim WEB As New Uri("https://login.live.com/login.srf" + "?" +
                                   "wa=wsignin1.0&rpsnv=11&ct=1332586469&rver=6.1.6206.0&wp=MBI_SSL_SHARED&wreply=https:%2F" +
                                   "%2Fmail.live.com%2Fdefault.aspx%3Fmkt%3Des-us&lc=2058&id=64855&mkt=es-us&cbcxt=mai")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "correo".ToUpper
            Case "yutube"
                Dim WEB As New Uri("http://www.youtube.com/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "yutube".ToUpper
            Case "impara"
                Dim WEB As New Uri("http://imparagratis.com/")
                NAVEGADOR.Visible = True
                NAVEGADOR.Url = WEB
                Text = "impara".ToUpper
          
            Case "abajo"
                DISTANCIA = DISTANCIA + 500
                NAVEGADOR.Document.Window.ScrollTo(0, DISTANCIA)
            Case "arriba"
                DISTANCIA = DISTANCIA - 500
                NAVEGADOR.Document.Window.ScrollTo(0, DISTANCIA)
            Case "silencio"
               SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_MUTE))
            Case "sonido"
                SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_UP))
            Case "atras"
                NAVEGADOR.GoBack()
            Case "adelante"
                NAVEGADOR.GoForward()
           
        End Select
    End Sub
    'ESTO SON OPCIONES PARA MANEJAR EL VOLUMEN
    'Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    '    SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_UP))
    'End Sub
    'Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    '    SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_DOWN))
    'End Sub
    'Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    '    SendMessageW(Me.Handle, WM_APPCOMMAND, Me.Handle, New IntPtr(APPCOMMAND_VOLUME_MUTE))
    'End Sub
End Class

29 comentarios:

  1. Hola amigo creador de este blog, necesito una ayuda urgente referente a este tema, descargue el codigo pero no me funciona, que herramientas debo tener instaladas para el reconocimiento de voz, descargue el SAPI (SpeechSDK51) de la pagina de microsoft y tengo visual .net 2005 - 2008 y en ninguno me funciona... tengo el sistema operativo windows xp, sera por eso que no funciona. tiene que ser en windows 7, dime cuales son los requerimientos que pide para que este codigo de reconocimiento de voz funcione.

    ResponderEliminar
    Respuestas
    1. Hola William:
      Efectivamente el reconocimiento de voz no funciona en XP. En XP funciona la voz de síntesis (Text to Speech) que permite que lea un texto pero no el reconocimiento de voz (Speech Recognition). Necesitas Windows7. Con windows7 no necesitas descargar nada. Solo agregar la referencia Speech y aplicar el código tal como esta aquí.
      En cuanto a Visual Studio te recomendaría que te bajes al menos Visual Basic 2010 Express, ya va por 2013. Es gratuito.
      Saludos.

      Eliminar
  2. Amigo yo tengo visual basic 2008 express pero con windows xp, pero pregunto si con vb2008 funciona igual en windows7, ya que el codigo lo coloque en vb2008 y no tenia ningun error, el unico error es al ejecutar sobre el idioma del reconocimiento de voz con el del sistema operativo. para asi probarlo en windows 7. lo que quiero hacer es que el usuario utilice el microfono para decir cierta palabra, y compararla para ver si es correcta la palabra que se esta diciendo por microfono. me imagino que se puede hacer con este ejemplo.

    ResponderEliminar
    Respuestas
    1. Hola William:
      El XP no tiene reconocimiento de voz de origen. Se que hay formas de añadírselo pero yo nunca lo he intentado. Mira este enlace.
      http://support.microsoft.com/kb/306537/es
      No conozco VB2008. Este proyecto fue realizado von VB2012 en Windows7 y no creo que funcione en versiones anteriores. O sea que no creo que te funcione en VB2008 aunque lo pongas en Windows7.
      Hay otro proyecto que se parece mas a lo que quieres hacer. El Juego Pasapalabra, en este mismo blog. Mañana colgare el código y el proyecto completo. Aunque también esta hecho en VB2012 y W7.
      Saludos.

      Eliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Hola gracias por tu aporte, ahora yo quiero ir un poco más, pensando en la gente ciega, que el programa pudiera leer lo que se ve, si bien entra todo el tema de interpretar el html, para lograr poder interactuar con la web, tienen algun proyecto de este estilo, estoy buscando información de como poder ayudar a las personas ciegas a poder navegar en internet, y he visto muchos programas que en realidad no son muy utiles si se ve desde el usuario ciego. Cualquier sugerencia me puede servir. Soy programador .net en vb.net y me gustaría poder desarrollar algo que pueda ayudar

    Desde ya muchas gracias.

    Mi correo gonzalo@nucleoe.com

    ResponderEliminar
    Respuestas
    1. Hola Gonzalo:
      Lo que planteas es muy interesante.
      La Web, con toda su carga multimedia, no esta pensada para personas ciegas. Por tanto, lo primero seria crearles una especie de" Web" para ciegos. Por ejemplo: Un agregador de noticias, un agregador de música,...., etc. A partir de ahí, jugando con el Reconocimiento de Voz y con el Texto a Voz, se podría crear una bonita aplicación para ciegos.
      O sea, puedes hacer un Agregador de Noticias a 2 niveles: 1)Titulares,2)La noticia detallada.
      La persona ciega puede decir "NOTICIAS" y el Texto a Voz puede leerle los titulares. Si dice "ENTRAR", el Texto a Voz, puede leerle la noticia detallada. Lo mismo con la música. Etc.
      Googleando un poco he encontrado esto:
      http://www.xsonar.com.ar/
      Llevar una cosa asi a .NET no es complicado aunque si puede ocupar tiempo.
      A tu disposición.
      Saludos.

      Eliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. Hola. Quería consultarte porque he creado una aplicación en Visual Studio 2010 target 4.0 pero me tira error "La cadena de entrada no tiene el formato correcto" cuando intento usar cualquier método del objeto SpeechSynthesizer. Pero si a la misma aplicación le cambio el target a 3.5 funciona correctamente. Sabes cuál puede ser el error?

    ResponderEliminar
    Respuestas
    1. Hola: Lo siento no tengo ni idea. Ni siquiera se como se elige el target. Siento no poder ayudarte. Saludos

      Eliminar
  7. tengo una pequeña pregunta, bueno problema, para el codigo del 01- Reconocimiento de Voz y Texto Hablado con Visual Basic (VB.NET) en la parte del vocabulario, como podria hacer que en esta parte :


    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

    Dim VOCABULARIO As New GrammarBuilder
    VOCABULARIO.Append(New Choices("entrada", "consulta", "guardar", "buscar", "hola"))
    REC.LoadGrammar(New Grammar(VOCABULARIO))
    REC.SetInputToDefaultAudioDevice()
    REC.RecognizeAsync(RecognizeMode.Multiple)
    AddHandler REC.SpeechRecognized, AddressOf RECONOCE
    AddHandler REC.SpeechRecognitionRejected, AddressOf NORECONOCE
    AddHandler REC.SpeechDetected, AddressOf DETECTA
    Timer1.Enabled = False
    End Sub



    en ves de escribir "entrada", "consulta" y todo eso, estuviera en una base de datos y que de la base de datos se importaran esas frases a esa parte del codigo?
    por favor si pudieras ayudarme te lo agradeceria mucho

    ResponderEliminar
    Respuestas
    1. Hola: Has visto esta aplicación:
      http://visualbasictutoriales.blogspot.com.es/2014/07/reconocimiento-de-voz-vocabularios.html
      Quiza resuelva tus dudas. Si necesitas ayuda deja un comentario. Saludosl

      Eliminar
  8. y como seria para ponerle un contador en el codigo del programa del jugando con el reconocimiento de voz, asi como hacer un puntaje para ver cuantos a destuido, por favor, te pido, ayúdame

    ResponderEliminar
    Respuestas
    1. Hola: ¿Has visto esta aplicación?
      http://visualbasictutoriales.blogspot.com.es/2014/07/otro-movimiento-de-picturebox-con.html.
      Se parece mucho a la que te interesa y en ella se implementan contadores de destruidos y tiempo. Si necesitas ayuda deja un comentario. Saludos.

      Eliminar
  9. hola, excelente proyecto me llamo mucho la atencion, me gustaria saber que tipo de objetos son SEÑAL, NAVEGADOR y los otros objetos que tienes en la ventana del form

    ResponderEliminar
    Respuestas
    1. Hola: Has puesto el comentario en una pagina genérica de Reconocimiento de Voz. Si lo pones en la pagina de un proyecto concreto me será mas fácil responderte. En cualquier caso, SEÑAL es siempre una etiqueta, indica con su color, la recepción del mensaje de voz( detecta, reconoce, no reconoce). NAVEGADOR es un WebBrowser. Si tienes alguna duda deja un comentario. Saludos.

      Eliminar
  10. hola maestro, podrias hacer cuando puedas un pequeño ejemplo de dictado por voz.
    que tenga para copiar, pegar eliminar etc. muchas gracias j.p

    ResponderEliminar
  11. Amigo, me encanto tu blog, me ha brindado muchísima información sobre comandos de voz, pero necesito una ayuda para configurar a gusto la voz del sintetizador.
    Espero puedas ayudarme, Gracias.

    ResponderEliminar
    Respuestas
    1. Hola: ¿Como puedo ayudarte? ¿Qué tipo de configuracion quieres hacer?¿Velocidad, volumen,......?. Saludos

      Eliminar
  12. CreateObject("SAPI.SpVoice").speak" busco las ultimas noticias te las leo."
    dim suma
    suma = 0
    set objshell = createobject("wscript.shell")
    URL = "http://www.el-nacional.com/rss/"
    dc = """"
    Set XD = CreateObject("MSXML2.DOMDocument")
    XD.ASync = false
    If XD.Load(URL) Then
    Set TitleName = XD.SelectNodes("//item/title") ' Mirar en la versión xml parea seleccionar los item que te interesen.
    Set sumario = XD.SelectNodes("//item/media:description")
    Set detalles = XD.SelectNodes("//item/description")
    For i = 0 To TitleName.Length - 2
    suma = suma+1
    CreateObject("SAPI.SpVoice").speak "noticia " & suma
    CreateObject("SAPI.SpVoice").speak TitleName(i).Text
    CreateObject("SAPI.SpVoice").speak sumario(i).Text
    'CreateObject("SAPI.SpVoice").speak detalles(i).Text
    myData = myData & TitleName(i).Text & sumario(i).Text & detalles(i).Text & vbCrLf
    if suma = 10 then CreateObject("SAPI.SpVoice").speak " ya te he leido las " & suma & " ultimas noticias" 'cambiar el valor 10 para cambiar el numero de noticias que quieres que te lea
    if suma = 10 then objshell.run "TASKKILL /F /IM wscript.exe /T",vbhide ' 'cambiar el valor 10 para cambiar el numero de noticias que quieres que te lea
    WScript.Sleep(1000)
    Next
    Else
    CreateObject("SAPI.SpVoice").speak "no hay noticias o la conexión a internet está fallando. "
    End If
    CreateObject("SAPI.SpVoice").speak "orden finalizada "

    ResponderEliminar
    Respuestas
    1. quiero esa http://www.el-nacional.com/rss/
      http://cdn.eluniversal.com/rss/avances.xml
      http://elnacional.com.do/feed/
      al tener fotos y cosas asi pues me da error como se puede solucionar?

      Eliminar
    2. Hola: Me parece que me he perdido en algún punto. ¿Puedes recordarme que quieres hacer?. ¿Para que es ese código?.¿De donde ha salido?. Parece antiguo.
      Si utilizases algún nombre (aunque sea inventado) me seria mas fácil seguir tus planteamientos. No se cuantos Anonimos me escriben y por tanto saber que comentario es de cada cual. También puedes utilizar mi dirección email: vb.tutoriales.abc@gmail.com.
      Saludos.

      Eliminar
  13. Sr. yo soy uno de sus fans y necesito que me ayude a mejorar uno de sus proyectos, es el de reconocimiento de imágenes por voz de animales, para la introducción de texto

    ResponderEliminar
  14. hola, como hago para que pueda reconocer oraciones , pues intento hacer y me sale palabra por palabra, además que son palabras que no dije.
    Saludos.

    ResponderEliminar
  15. Buenas tardes, me gustaría saber que capacidad tiene el vocabulario ¿cuantas palabras o frases puede almacenar de una sóla vez?
    Muchas gracias

    ResponderEliminar
  16. Hola me podes ayudar con un codigo para pasar de voz a texto. Y guardar en txt te paso mi whatsapp +5492625596416

    ResponderEliminar
  17. Para que es ese código?.¿De donde ha salido?. Parece antiguo.
    Si utilizases algún nombre (aunque sea inventado) me seria mas fácil seguir tus planteamientos. No se cuantos Anonimos me escriben y por tanto saber que comentario es de cada c coaching-mastery.com/4-sencillos-tips-para-conseguir-un-buen-prestamo-informe-medico-seguros-banorte/

    ResponderEliminar