Realizar una comunicación enviando preguntas y respondiendo de forma automática mediante el motor de síntesis de voz en PowerShell (con restricciones para una gramática de reconocimiento de voz) (PowerShell)
####################################################################################################
####################################################################################################
#Teniendo en cuenta la idea de comunicar dos ordenadores mediante la voz del sistema operativo
#https://www.jesusninoc.com/2016/01/10/comunicar-dos-ordenadores-mediante-la-voz-del-sistema-operativo/
#Realizar una comunicación enviando preguntas y respondiendo de forma automática
####################################################################################################
####################################################################################################
Reconocimiento y respuesta (ejecutar primero)
####################################################################################################
#RECONOCIMIENTO Y RESPUESTA
####################################################################################################
#Crear objeto para reconocimiento
Add-Type -AssemblyName System.Speech
$rec = New-Object 'System.Speech.Recognition.SpeechRecognitionEngine'
#Crear las restricciones para una gramática de reconocimiento de voz
$rec.LoadGrammar([System.Speech.Recognition.GrammarBuilder]::new("tal"))
$rec.LoadGrammar([System.Speech.Recognition.GrammarBuilder]::new("años"))
$rec.LoadGrammar([System.Speech.Recognition.GrammarBuilder]::new("novia"))
$rec.LoadGrammar([System.Speech.Recognition.GrammarBuilder]::new("novio"))
$rec.SetInputToDefaultAudioDevice()
#Añadir posibles respuestas
"tal|Bien y tú?" | Out-File frases.txt
"años|40" | Out-File frases.txt -Append
"novia|Sí" | Out-File frases.txt -Append
"novio|Sí" | Out-File frases.txt -Append
#Crear un ArrayList con las respuestas
[System.Collections.ArrayList]$arraylist = New-Object System.Collections.ArrayList
ForEach ($elemento in (gc .\frases.txt).split("|")){[void]$arraylist.Add($elemento)}
#Función para comprobar si el mensaje que llega está entre las posibles respuestas
#La función responde mediante la voz del Sistema Operativo
function comprobar($frase){
[System.Collections.ArrayList]$arraylist2 = New-Object System.Collections.ArrayList
ForEach ($elemento in $frase.split(" ")){[void]$arraylist2.Add($elemento)}
$arraylist2 | %{
if($arraylist.IndexOf($_) -ne -1){
"Respuesta: " +$arraylist[($arraylist.IndexOf($_))+1]
(New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer).Speak($arraylist[($arraylist.IndexOf($_))+1])
}
}
}
#Comenzar a reconocer los audios que vayan llegando y comprobar qué mensajes llegan
do{
$mensaje=$rec.Recognize().Text
$mensaje
comprobar $mensaje
}while(1)
Enviar preguntas
####################################################################################################
#ENVIAR PREGUNTAS
####################################################################################################
#Leer el texto contenido dentro de un fichero mediante la voz del Sistema Operativo
Add-Type -AssemblyName System.Speech
#Añadir textos para que se lean
"¿Qué tal?" | Out-File conversacion.txt
"¿Cuántos años tienes?" | Out-File conversacion.txt -Append
"¿Tienes novia?" | Out-File conversacion.txt -Append
#Leer los textos mediante la voz del Sistema Operativo
gc conversacion.txt | %{
$_
(New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer).Speak($_)
Start-Sleep -Seconds 3
}
Para ofrecer las mejores experiencias, utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. El consentimiento de estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos.El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos anónimos. Sin un requerimiento, el cumplimiento voluntario por parte de tu Proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarte.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en una web o en varias web con fines de marketing similares.