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
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,
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,
mouse_event(MOUSEEVENTF_LEFTUP, PUNTOX,
PUNTOY, 0, 0)
End Sub
Public Sub CLICKDCHO()
mouse_event(MOUSEEVENTF_RIGHTDOWN,
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)
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
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.
ResponderEliminarHola William:
EliminarEfectivamente 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.
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.
ResponderEliminarHola William:
EliminarEl 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.
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola 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
ResponderEliminarDesde ya muchas gracias.
Mi correo gonzalo@nucleoe.com
Hola Gonzalo:
EliminarLo 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.
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola. 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?
ResponderEliminarHola: Lo siento no tengo ni idea. Ni siquiera se como se elige el target. Siento no poder ayudarte. Saludos
Eliminartengo 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 :
ResponderEliminarPrivate 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
Hola: Has visto esta aplicación:
Eliminarhttp://visualbasictutoriales.blogspot.com.es/2014/07/reconocimiento-de-voz-vocabularios.html
Quiza resuelva tus dudas. Si necesitas ayuda deja un comentario. Saludosl
mmm lo probare y luego te aviso, cualquier cosa
Eliminary 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
ResponderEliminarHola: ¿Has visto esta aplicación?
Eliminarhttp://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.
hey muchas gracias, me sirvió mucho
Eliminarhola, 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
ResponderEliminarHola: 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.
Eliminarhola maestro, podrias hacer cuando puedas un pequeño ejemplo de dictado por voz.
ResponderEliminarque tenga para copiar, pegar eliminar etc. muchas gracias j.p
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.
ResponderEliminarEspero puedas ayudarme, Gracias.
Hola: ¿Como puedo ayudarte? ¿Qué tipo de configuracion quieres hacer?¿Velocidad, volumen,......?. Saludos
EliminarCreateObject("SAPI.SpVoice").speak" busco las ultimas noticias te las leo."
ResponderEliminardim 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 "
quiero esa http://www.el-nacional.com/rss/
Eliminarhttp://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?
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.
EliminarSi 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.
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
ResponderEliminarhola, como hago para que pueda reconocer oraciones , pues intento hacer y me sale palabra por palabra, además que son palabras que no dije.
ResponderEliminarSaludos.
Buenas tardes, me gustaría saber que capacidad tiene el vocabulario ¿cuantas palabras o frases puede almacenar de una sóla vez?
ResponderEliminarMuchas gracias
Hola me podes ayudar con un codigo para pasar de voz a texto. Y guardar en txt te paso mi whatsapp +5492625596416
ResponderEliminarPara que es ese código?.¿De donde ha salido?. Parece antiguo.
ResponderEliminarSi 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/