diff --git a/index.html b/index.html index f0bd24b..8b0dad7 100644 --- a/index.html +++ b/index.html @@ -55,6 +55,7 @@ const SpeechRecognition = window.webkitSpeechRecognition; recognizer = new SpeechRecognition(); recognizer.interimResults = true; recognizer.continuous = true; +// does not work recognizer.lang = 'fr-FR'; recognizer.lang = 'en-US'; const aframeprimitives = getAllPrimitives() @@ -66,34 +67,31 @@ recognizer.onresult = (event) => { if (result.isFinal) { console.log('You said: ' + result[0].transcript ) - // should instead look if starting with speechContent following by aframeprimitives, optionally speechcustomcomponents - // then apply accordingly let speechContent = result[0].transcript - // let newPostIt = addNewNoteAsPostItNote(speechContent, "0 1.2 -.5") - // could become jxr code proper later, also allowing to re-execute a command again + let latest = addedContent.at(-1) let cmd_words = speechContent.split(" ").map( i => i.toLowerCase() ) - if (cmd_words[0] == speechactions[0]){ // limited to add command for now + let el + + switch(cmd_words[0]) { + case speechactions[0]: console.log("recognized proper command") let primitive = cmd_words[1] // assuming fixed order for now - let el = document.createElement("a-"+primitive) + el = document.createElement("a-"+primitive) el.setAttribute("target", "") el.setAttribute("scale", ".1 .1 .1") el.setAttribute("position", "0 1.5 -0.4") addedContent.push(el) AFRAME.scenes[0].appendChild( el ) - } - - if (cmd_words[0] == speechactions[1]){ // limited to apply + break; + case speechactions[1] : console.log("recognized apply command") - addedContent.at(-1).setAttribute( cmd_words[1], cmd_words[2]) // assuming fixed order for now - } - - if (cmd_words[0] == speechactions[2]) - deleteTarget( addedContent.at(-1) ) - - let latest = addedContent.at(-1) - if (cmd_words[0] == speechactions[3]){ - let el = latest.cloneNode(true) // does not work properly, losing some attributes, in particular scale can be problematic + latest.setAttribute( cmd_words[1], cmd_words[2]) // assuming fixed order for now + break; + case speechactions[2] : + deleteTarget( latest ) + break; + case speechactions[3] : + el = latest.cloneNode(true) // does not work properly, losing some attributes, in particular scale can be problematic //["scale", "position", "rotation", "wireframe", "target", "material"].map( prop => el.setAttribute(prop, latest.getAttribute(prop) ) ) //["scale", "position", "rotation", "target" ].map( prop => el.setAttribute(prop, latest.getAttribute(prop) ) ) el.setAttribute("scale", latest.getAttribute("scale") ) @@ -105,11 +103,15 @@ recognizer.onresult = (event) => { // could optionally add a number of times addedContent.push(el) AFRAME.scenes[0].appendChild( el ) - el.object3D.translateX(1) - } - - if (cmd_words[0] == speechactions[4]) - getModelFromKeyword( cmd_words[1] ) + el.object3D.translateX(10) // due to scaling + break; + case speechactions[4] : + getModelFromKeyword( cmd_words[1] ) // requires the backend (proxy, LAN only for now, waiting for API clarification on 403) + break; + default: + addedContent.push( addNewNoteAsPostItNote(speechContent, "0 1.2 -.5") ) + // could become jxr code proper later, also allowing to re-execute a command again + } } } recognizer.start();