- Load
- Create new object Voice
- Voice Recognition
- Speech Synthesis
- voice.data
- voice.topics
- voice.analyze
- voice.generateExpression
- API Summary
- Example
Cargar
<script src="js/voice/voice.js"></script>
<script src="js/voice/voiceBrowser.js"></script>
Crear objeto Voice
El primer paso es crear el objeto Vocie. Como parámetro recibe el lenguaje que con el que va trabajar. Si no se le pasa este parámetro usara el de navegador.
var voice = new Voice();//uses language from browser
var voice = new Voice("es");//spanish
var voice = new Voice("en");//english
Reconocimiento del habla
VoiceCommand
Para el reconocmiento del habla necesitar crear un objeto VoiceCommad
function VoiceCommand() {
this.name; //string
this.expressions; //array of string
this.execute; //function
}
Cada VoiceCommand tiene tres campos:
-
name: nombre de la expresión
-
expressions: Es un array de expresiones, si el texto coincide con alguna lanzará la función en el campo execute
-
execute: función que se lanzará. Recibe tres parámetros:
-
exp: el indice de la expresión que ha coincidido
-
m: array con la coincidencia de texto de cada token de la expresión. m[0] incluye todo el texto
-
voice: referencia al al objeto Voice
-
Ejemplo:
var vc1 = new VoiceCommand();
vc1.name="hi";
vc1.expressions[0] = "bot# hello";
vc1.execute = function(exp, m, voice) {
voice.talk("hi person");
};
Tras crear un VoiceCommand tienes que añadirlo con addVoiceCommand
voice.addVoiceCommand(vcmd, topic);
vcmd: VoiceCommand que se añadirá
topic: No obligatorio. Tópico de la conversación. El VoiceCommand será usado solo cuando ese topico este activo. su valor por defecto es “default”
voice.addVoiceCommand(vc1);
Expressions
“Expressions” son expresiones regulares. El agnete con las expresiones en el objeto VoiceCommand, si coincide alguna ejecuta la función correspondiente.
No se usan expresiones regulares directamente, se crean token que permiten a base de frgamentos componer expresiones que coincidan con el texto
var useful_tokens = {
"bot#": "chispa|chispas",
"word#": "[a-bA-B]*",
"number#": "[0-9]*",
"any#": ".*"
}
var english_tokens = {
"hello": "hi|hello",
"sayhelloto": "say hello to",
"sayhello": "say hello",
"sing": "sing",
"salsa": "salsa|salsita",
"bachata": "bachata",
"mynameis": "my name is|i am",
"search": "search",
"repeat": "say|repeat"
}
Los tokens se usan para componer la expresión:
var vc1 = new VoiceCommand();
vc1.name="hi";
vc1.expressions[0] = "bot# hello";
vc1.execute = function(exp, m, voice) {
voice.talk("hi person");
};
var vc2 = new VoiceCommand();
vc2.name="say hello to";
vc2.expressions[0] = "bot# sayhelloto any#?";
vc2.expressions[1] = "bot# sayhello";
vc2.execute = function(exp, m, voice) {
if(exp == 0 && m.length > 3)
voice.talk("hi "+"#"+m[3]);//m[3] - any#
else
voice.talk("hi");
};
Puedes añadir modificadores a los tokes:
- *: El token se repite una o más veces
- ?: El token se repite cero o una veces
-
_ _: Token1 token2 uno de los tokens debe de estar en el texto
Maybe you prefer create you own regular expresion, no problem, you only need put * as first character in expression.
Sintesis de voz
Para la sintesis de voz se usa el comando talk
voice.talk(text, topics);
text: Texto que se va decir. Hay diferentes modificadores.
- *: Any phrase start with * is translate literaly
- #text: Any word start with # is translate literaly
- $name: Remplace $data by voice.data[name]
topics: No obligatory. Array of one or more topics. Default value is voice.topics value.
voice.talk("hi person");
voice.data["name"] = "Cubiwan";
voice.talk("hi $name"); //hello cubiwan
voice.talk("*hello my friend");
Diccionarios
You need create a dictionary of tokens. you could use few options for token. When you generates an expresion token will be remplace randomly by one of options.
var english_dictionary = {
"hi": ["hi", "hello"],
"person": ["person","human"],
"yes": ["yes","afirmative"],
"no": ["no","negative"],
"ok": ["ok", "right"]
};
Now you can add dictionaries to generate expresions
voice.addDictionary(english_dictionary);
addDictionary: Have two params
- dictionary: Dictionay of tokens to words
- topic: No obligatory, dictionary only will be used when generateExpression recive the same topic. Default value is “default”
voice.data
voice.data es un hasmap que se usa para guardar datos para usarlos con el comando talk reemplazndo los tokens con $ por su valor: $token -> voice.data[‘$token’]
voice.data["name"] = "Cubiwan";
voice.talk("hi $name"); //hello cubiwan
voice.topics
voice.topics es un array de tópicos que se usa como valor por defecto del parámetro topics en las funciones. Su valor por defecto es [“default”]
voice.topics.push("sing");
voice.analyze
Si no necesitas la parte de reconocimiento de voz pero quieres usar la libreria para analizar textos puede recurrir a la función analyze
voice.analyze(text, topics);
text: Texto para analizar topics: No es obligatorio. Array de uno o más tópicos. Su valor por defecto es el de voice.topics.
voice.generateExpression
Si quieres generar frases a partir de tokens pero sin la parte de la sintesis de voz puedes usar la función generateExpression
voice.generateExpression = function(text, data, topics)
text: Tokens a tranformar en expresion data: No es obligatorio. Mapa con los datos. su valor por defecto es voice.data. topics: No es obligatorio. Array de uno o más tópicos. Su valor por defecto es el de voice.topics.
Resumen de la API
- new Voice(lang);
- voice.init();
- voice.addVoiceCommand(vcmd, topic);
- voice.analyze(text, topics);
- voice.generateExpression(text, data, topics);
- voice.talk(text, topics);
- voice.addDictionary(english_dictionary);
- voice.data = [];
- voice.topics = [“default”];