var Speech = (function() { var answerFinal = ""; var playing = ""; function init(settings){ //No Initialization as of now. document.getElementById('speaklang').innerHTML = settings.language; meSpeak.loadConfig("mespeak_config.json"); loadVoice(settings.language); } function getBotReply(question){ var aimlInterpreter = new AIMLInterpreter({name:'WireInterpreter', age:'42'}); var filesArray = ['js/alice/star.aiml']; var words = question.split(' '); var marked = new Array(256); for(i=0;i<256;i++){ marked[i] = 0; } for(i=0; i= 'a' && words[i][0] <= 'z'){ if (marked[(words[i].charCodeAt(0)+'A'.charCodeAt(0)-'a'.charCodeAt(0))] == 0){ marked[(words[i].charCodeAt(0)+'A'.charCodeAt(0)-'a'.charCodeAt(0))] = 1; filesArray.unshift("js/alice/" + String.fromCharCode(words[i].charCodeAt(0)+'A'.charCodeAt(0)-'a'.charCodeAt(0)) + ".aiml"); } } if((words[i][0] >= 'A' && words[i][0] <= 'Z') || (words[i][0] >= '0' && words[i][0] <= '9')){ if (marked[words[i].charCodeAt(0)] == 0){ marked[words[i].charCodeAt(0)] = 1; filesArray.unshift("js/alice/" + words[i][0] + ".aiml"); } } } //console.log(filesArray); aimlInterpreter.loadAIMLFilesIntoArray(filesArray); answerFinal = "Please ask me something else"; var callback = function(answer, wildCardArray, input){ if(answer == null){ answer = "Please ask me something else"; } answerFinal = answer.split('.')[0]; }; aimlInterpreter.findAnswerInLoadedAIMLFiles(question, callback); } function testVoice(voice, callback) { var req=new XMLHttpRequest(); req.url = voice; try { req.open('GET', voice); req.onreadystatechange=function() { if (req.readyState==4) { callback((req.status==200 || req.status==0) && req.response.length > 0); } }; req.send(''); } catch(e) { callback(false); } } function loadVoice(name, callback) { var defaultVoice = meSpeak.getDefaultVoice(); if (defaultVoice == name || defaultVoice.indexOf(name) == 0) { if (callback) callback(); return; } var fname = "voices/"+name+".json"; testVoice(fname, function(exist) { if (exist) { meSpeak.loadVoice(fname, callback); } else { document.getElementById('speaklang').innerHTML = "en"; meSpeak.loadVoice("voices/en.json", callback); } }); } hiddenArray(); // Access speakArray // Function containing the speakArray, which saves the recent talk array function hiddenArray() { speakArray = []; } function playVoice(language, text) { playing = text; //Adds option when text is spoken var addUserInput = document.createElement("OPTION"); addUserInput.setAttribute("value", playing); addUserInput.text = playing; document.getElementById("combo-box").appendChild(addUserInput); document.getElementById("combo-box").value= playing; speakArray.push(playing); // Adds recent talks to speakArray if(document.getElementById('mode').innerHTML=="2"){ //After the voice is loaded, playSound callback is called getBotReply(text); setTimeout(function(){ loadVoice(language, playSound); }, 4000); } else{ loadVoice(language, playSound); } } function playSound(){ var text = playing; var pitch = document.getElementById('pitch').innerHTML; var speed = document.getElementById('rate').innerHTML; if(document.getElementById('mode').innerHTML=="2"){ text = answerFinal; console.log(answerFinal); } function soundComplete(){ document.getElementById('speaking').innerHTML = "0"; } if (!/iPad|iPhone/.test(navigator.userAgent)) { meSpeak.speak(text, {speed: speed, pitch: pitch}, soundComplete); } else { // HACK: On iOS, need to be played into an HTMLAudio control var myDataUrl = meSpeak.speak(text, {speed: speed, pitch: pitch, rawdata: 'data-url'}, soundComplete); var sound = new Audio(myDataUrl); sound.addEventListener("ended", function(){ document.getElementById('speaking').innerHTML = "0"; }); sound.play(); } } return { init: init, playVoice: playVoice }; });