View on GitHub

jsBotVoice

Create voice bots for browser

Español # English

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:

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:

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.

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

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

Ejemplo

Demo