Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add Voice control interface #32
Merged
Commits
Jump to file or symbol
Failed to load files and symbols.
Diff settings
Viewing a subset of changes. View all
use regex to catch command
- Loading branch information...
Jeff Zhang
authored and Jeff Zhang
committed
Jul 7, 2016
commit f80fe4a905c0c2c52966d72a4faf3df1d1f37f8a
| @@ -1,32 +1,171 @@ | ||
| -if(annyang){ | ||
| - | ||
| - pressKeyFunctionConstructor = function(key){ | ||
| - key = key.toLowerCase() | ||
| - var func = function(){ | ||
| - pressButton(key,20); | ||
| - }; | ||
| - return func; | ||
| +// if(annyang){ | ||
| + | ||
| +// pressKeyFunctionConstructor = function(key){ | ||
| +// key = key.toLowerCase() | ||
| +// var func = function(){ | ||
| +// pressButton(key,20); | ||
| +// }; | ||
| +// return func; | ||
| +// } | ||
| + | ||
| +// handleButton = function(key){ | ||
| +// //lower case the key to ignore capitals | ||
| +// key = key.toLowerCase(); | ||
| +// pressButton(key, 20); | ||
| +// } | ||
| + | ||
| + | ||
| + | ||
| +// var commands = {}; | ||
| + | ||
| +// for (var key in mapButtontoIndex){ | ||
| +// commands[key] = pressKeyFunctionConstructor(key); | ||
| +// } | ||
| +// commands["press (the) button *key"] = handleButton; | ||
| +// commands["press (the) key *key"] = handleButton; | ||
| + | ||
| + | ||
| + | ||
| +// // Add our commands to annyang | ||
| +// annyang.addCommands(commands); | ||
| +// annyang.start(); | ||
| +// } | ||
| + | ||
| +var mapButtontoIndex = {"a":0, "b":1, "select":2, "start":3, "right":4, "left": 5, "up":6 ,"down":7, "r":8, "l":9}; | ||
| +var SpeechRecognition = SpeechRecognition || | ||
| + webkitSpeechRecognition || | ||
| + mozSpeechRecognition || | ||
| + msSpeechRecognition || | ||
| + oSpeechRecognition; | ||
| + | ||
| +if (SpeechRecognition){ | ||
| + recognition = new SpeechRecognition(); | ||
| + recognition.maxAlternatives = 30; | ||
| + recognition.continuous = true; | ||
| + recognition.lang = 'en-US'; | ||
| + | ||
| + recognition.onstart = function() { | ||
| + console.log("start"); | ||
| + }; | ||
| + | ||
| + recognition.onerror = function(event) { | ||
| + console.log(event); | ||
| + }; | ||
| + | ||
| + recognition.onend = function() { | ||
| + console.log("end"); | ||
| + recognition.start(); | ||
| + }; | ||
| + | ||
| + | ||
| + var controlRegex = new RegExp(/(?:press|push)(?:\sthe)?(?:\sbutton|\skey)?\s(\w+)/, 'i'); | ||
| + handleButton = function(result) { | ||
| + var match = controlRegex.exec(result); | ||
| + if (match != null){ | ||
| + var key = match[1].toLowerCase(); | ||
| + if (key in mapButtontoIndex){ | ||
| + pressButton(key, 20); | ||
| + return true; | ||
| + } | ||
| + } | ||
| + return false; | ||
| } | ||
| - handleButton = function(key){ | ||
| - //lower case the key to ignore capitals | ||
| - key = key.toLowerCase(); | ||
| - pressButton(key, 20); | ||
| + // var fullScreenRegex = new RegExp(/fullscreen|full-screen/, 'i'); | ||
| + // handleFullscreen = function(result) { | ||
| + // console.log("fullscreen handler"); | ||
| + // if (fullScreenRegex.test(result)){ | ||
| + // toggleFullScreen(); | ||
| + // return true; | ||
| + // } | ||
| + // return false; | ||
| + // } | ||
| + | ||
| + var settingsRegexOne = new RegExp(/(increase|up|decrease|down)(?:\sthe)?\s(volume|speed)(\sby\s(\w+))?/, 'i'); | ||
| + var settingsRegexTwo = new RegExp(/(?:set|move|get)(?:\sthe)?\s(volume|speed)(?:\sto)?\s(\w+)/, 'i'); | ||
| + handleSettings = function(result) { | ||
| + var matchOne = settingsRegexOne.exec(result); | ||
| + var matchTwo = settingsRegexTwo.exec(result); | ||
| + if(matchOne != null){ | ||
| + var action = matchOne[1].toLowerCase(); | ||
| + var obj = matchOne[2].toLowerCase(); | ||
| + var num = matchOne[4]; | ||
| + if( isNaN(num) ){ | ||
| + num = 0.1; | ||
| + } | ||
| + else{ | ||
| + num = parseInt(num) / 100; | ||
| + } | ||
| + if (action == "increase" || action == "up"){ | ||
| + num = num; | ||
| + } | ||
| + else{ | ||
| + num = -num; | ||
| + } | ||
| + if (obj == "volume"){ | ||
| + stepVolume(num); | ||
| + } | ||
| + else{ | ||
| + IodineGUI.Iodine.incrementSpeed(num); | ||
| + } | ||
| + return true; | ||
| + } | ||
| + | ||
| + if(matchTwo != null){ | ||
| + var obj = matchTwo[1].toLowerCase(); | ||
| + var num = matchTwo[2]; | ||
| + if( isNaN(num) ){ | ||
| + num = 0.1; | ||
| + } | ||
| + else{ | ||
| + num = parseInt(num) / 100; | ||
| + } | ||
| + if (obj == "volume"){ | ||
| + stepVolume(-1); | ||
| + stepVolume(num); | ||
| + } | ||
| + else{ | ||
| + IodineGUI.Iodine.setSpeed(num); | ||
| + } | ||
| + return true; | ||
| + } | ||
| + return false; | ||
| } | ||
| - var mapButtontoIndex = {"a":0, "b":1, "select":2, "start":3, "right":4, "left": 5, "up":6 ,"down":7, "r":8, "l":9}; | ||
| + var RegexFunc = [handleButton, handleSettings]; | ||
| - var commands = {}; | ||
| + handleResults = function(results) { | ||
| + console.log(results); | ||
| - for (var key in mapButtontoIndex){ | ||
| - commands[key] = pressKeyFunctionConstructor(key); | ||
| + var handled = false; | ||
| + for (var k = 0; k < results.length; k++){ | ||
| + var result = results[k]; | ||
| + for (var funcIndex = 0; funcIndex < RegexFunc.length; funcIndex++){ | ||
| + if (RegexFunc[funcIndex](result) ) { | ||
| + handled = true; | ||
| + break; | ||
| + } | ||
| + } | ||
| + if (handled){ | ||
| + break; | ||
| + } | ||
| + } | ||
| } | ||
| - commands["press (the) button *key"] = handleButton; | ||
| - commands["press (the) key *key"] = handleButton; | ||
| + | ||
| + recognition.onresult = function(event) { | ||
| + console.log('result'); | ||
| + var SpeechRecognitionResult = event.results[event.resultIndex]; | ||
| + var results = []; | ||
| + for (var k = 0; k<SpeechRecognitionResult.length; k++) { | ||
| + results[k] = SpeechRecognitionResult[k].transcript; | ||
| + } | ||
| + handleResults(results); | ||
| + }; | ||
| + | ||
| + recognition.start(); | ||
| + | ||
| +} | ||
| + | ||
| - // Add our commands to annyang | ||
| - annyang.addCommands(commands); | ||
| - annyang.start(); | ||
| -} |