Paso 3: Empezar a dibujar
Escriba lo siguiente en el nuevo bosquejo. (Alternativamente se puede agarrar el archivo de texto "voce1.txt" y copiar/pegarlo en su bosquejo)
//import las bibliotecasImport guru.ttslib.*;
Import processing.serial.*;
dar nuestros nombres de instancias
Serie treePort;
TTS tts;
Una cadena para sujetar cosas que decir
Cadena de mensaje = "Ho Ho Ho";
void setup() {} void draw() {}
a continuación inicia la biblioteca de voce
Voce. SpeechInterface.init ("libraries/voce-0.9.1/lib", true, true,"libraries/voce-0.9.1/lib/gram","digits");
iniciar nuestro puerto y tts
treePort = new Serial(this,Serial.list()[0],9600);
TTS = nuevo TTS();
los siguientes ajustes controlan el sonido de la voz
tts.setPitch (180);
tts.setPitchRange (90);
tts.setPitchShift (-10,5);
treePort.write("73"); Enviar comando para encender las luces y abrir los ojos
}
Si (voce. SpeechInterface.getRecognizerQueueSize() > 0) {//if voce reconoce nada se dice
String s = voce. SpeechInterface.popRecognizedString(); Asigne la cadena que voce oído a la variable s
println ("usted ha dicho:" + s); imprimir lo que se escuchó en la ventana depuración.
Respond(s);
}
}
Usted notará que estoy utilizando no el mBrola voces más, encontré que eran contradictorios con voce. Por tweeking la echada, pitchrange y pitchshift puede trabajar una voz similar. Entiendo que son no Siri voces de calidad, pero es una buena manera de tener su proyecto de hablar. Siento que robots suenan bien cuando como robots, pero entonces es a mí.
También notaremos que no necesitamos importar a la biblioteca, hicimos directamente importando los archivos jar.
La estructura de la llamada de inicialización de configuración es como sigue;
(ubicación de archivos de la biblioteca, boolean para la generación de discurso, boolean para reconocimiento de voz, ubicación de los archivos de gramática y el nombre del archivo de gramática).
Antes de que podemos empezar con el discurso más dinámicamente generado, necesitamos escribir una pequeña función que se encarga de animar dinámicamente el árbol cuando está hablando.
Ir hasta el fondo de que bosquejar, debajo de la función de drenaje y agregar lo siguiente.
//This función se divide el texto en varias palabras y decidir cómo animar dependiendo de la longitud de cada palabra y también las pausas que se denota por "!"Respuesta nula (entrada de cadena) {}
Si (input.length() > 0) {//we realmente tienen algo que decir
Voce. SpeechInterface.setRecognizerEnabled(false); dejar de escuchar, de lo contrario vamos a escuchar a nosotros mismos y entrar en un bucle
Este se divide justo encima de todas las palabras envía propuesta
String [] palabras = split (entrada,"");
int howMany = words.length;
para (int i = 0; i < cuantos; i ++) {}
Pedazos de cadena [] = split(words[i],"!"); Si vemos un! luego de la lectura pausas ligeramente por lo que es un buen momento para parpadear
{if(pieces.length==2)}
treePort.write("1");
pausa de int = int(random(100));
if(PAUSE>60) {}
treePort.write("5");
}
Else {}
treePort.write("7");
Delay(500);
}
}
Else {}
treePort.write("1");
}
}
TTS.Speak(INPUT);
Voce. SpeechInterface.setRecognizerEnabled(true);
}
}
Básicamente esto animará su árbol dependiendo de la cadena que está procesando actualmente. Este es un simple intento. Podría tomarla en cuanto te gusta agregando movimientos personalizados más sobre en el lado de Arduino y análisis de las secuencias más sincronización más precisa.
Si ahora ejecuta este bosquejo, el robot debe ser capaz de reconocer las palabras "uno", "dos", "tres", "cuatro", "cinco", "seis", "seven", "ocho", "nueve", "cero" y "o" y repetir nuevamente que cuando los oye. Adelante, ejecutar el dibujo y darle una oportunidad. Ser paciente, tarda un minuto (figurativamente) para cargar y escuchar un par de segundos antes de que el micrófono esté encendido y correctamente.
Otra cosa que tomar nota de es cómo el reconocedor trata de hacer sentido a casi todo el discurso oye, y así será escapar con números no importa de qué palabras están hablando. No te preocupes, trataremos en los siguientes pasos.